我在postgres中使用下面的StaticSentence创建了一个表,表reads是从另一个表products创建的,其中的数据被删除了,因为我只需要模式(我确实是个新手,但我相信有更好的方法来处理这个问题)。
public void syncProductsBefore() throws BasicException {
new StaticSentence(s,"CREATE TABLE PRODUCTS_imports(ID) WITH OIDS AS SELECT * FROM PRODUCTS ").exec();
new StaticSentence(s, "DELETE FROM PRODUCTS_imports").exec();
}
然后我试着用下面的方法中的PreparedSentence写入这个表。2首先运行一个update命令来决定是插入新数据还是更新现有数据。
公共void同步产品(最终ProductInfoExt产品)引发基本异常{
Transaction t = new Transaction(s) {
public Object transact() throws BasicException {
/*Sync the Product in a transaction*/
/* Try to update*/
if (new PreparedSentence(
s,
"UPDATE PRODUCTS SET REFERENCE = ?, CODE = ?, NAME = ?, PRICEBUY = ?, PRICESELL = ?, CATEGORY = ?, TAXCAT = ?, IMAGE = ? WHERE ID = ?",
SerializerWriteParams.INSTANCE).exec(new DataParams() {
public void writeValues() throws BasicException {
setString(1, prod.getReference());
setString(2, prod.getCode());
setString(3, prod.getName());
// setBoolean(x, p.isCom());
// setBoolean(x, p.isScale());
setDouble(4, prod.getPriceBuy());
setDouble(5, prod.getPriceSell());
setString(6, prod.getCategoryID());
setString(7, prod.getTaxCategoryID());
setBytes(8, ImageUtils.writeImage(prod.getImage()));
// setDouble(x, 0.0);
// setDouble(x, 0.0);
setString(9, prod.getID());
}
}) == 0) {
/* leyonce */
/**
* If not updated, try to insert insert into the import
* temporary table create temporary sorted copies of product
* catalog and products
*/
new PreparedSentence(
s,
"INSERT INTO PRODUCTS_imports(ID, REFERENCE, CODE, NAME, ISCOM, ISSCALE, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, IMAGE, STOCKCOST, STOCKVOLUME) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
SerializerWriteParams.INSTANCE)
.exec(new DataParams() {
public void writeValues() throws BasicException{
/*leyonce --insert values into temporary import table*/
setString(1, prod.getID());
setString(2, prod.getReference());
setString(3, prod.getCode());
setString(4, prod.getName());
setBoolean(5, prod.isCom());
setBoolean(6, prod.isScale());
setDouble(7, prod.getPriceBuy());
setDouble(8, prod.getPriceSell());
setString(9, prod.getCategoryID());
setString(10, prod.getTaxCategoryID());
setBytes(11, ImageUtils.writeImage(prod
.getImage()));
setDouble(12, 0.0);
setDouble(13, 0.0);
);}
现在更新运行得很完美,但是当编译器到达insert语句时,它会回滚并返回错误
org.postgresql.util.PSQLException:
ERROR: column "id" does not exist
Position: 84
我真的不明白为什么。
1条答案
按热度按时间cedebl8k1#
他们有ID栏吗?
如果原始表(products)缺少可以解释错误的ID列。