CREATE TABLE "table" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"col1" BLOB,
"col2" BLOB,
"col3" BLOB,
"coln" BLOB
);
id|col1|col2|col3|coln
1 | 1-1| 1-2| 1-3| 1-n
2 | 2-1| 2-2| 2-3| 2-n
UPDATE table SET col1=?, col2=?, col3=?, coln=? WHERE id=?;
如何通过上述SQL语句在某些条件下不改变某些列。
源码。
例如,
public static class Bean{
public long id;
public byte[] col1;
public byte[] col2;
public byte[] col3;
public byte[] coln;
}
PreparedStatement psUpdate = dsConn.prepareStatement("UPDATE table SET col1=?, col2=?, col3=?, coln=? WHERE id=?;");
Bean bean = new Bean();
if(null != bean.col1){
psUpdate.setBytes(1, bean.col1);//col1
}else{
psUpdate.omitColumn(1);//omit to update
}
if(null != bean.col2){
psUpdate.setBytes(2, bean.col2);//col2
}else{
psUpdate.omitColumn(2);//omit to update
}
if(null != bean.col3){
psUpdate.setBytes(3, bean.col3);//col3
}else{
psUpdate.omitColumn(3);//omit to update
}
if(null != bean.coln){
psUpdate.setBytes(4, bean.coln);//coln
}else{
psUpdate.omitColumn(4);//omit to update
}
psUpdate.setBytes(5, bean.id);//WHERE id=?
psUpdate.executeUpdate();
我已经阅读了有关sqlite或java的文档。不幸的是,这似乎是不可能的。
答案 0 :(得分:0)
您应该只构造适当的UPDATE语句,只包含您实际想要更新的列。
但是如果你真的想要使用单个语句,那么如果参数为NULL,你可以使用CASE expressions用旧值更新列:
UPDATE MyTable
SET col1 = CASE WHEN ?1 IS NULL THEN col1 ELSE ?1 END,
col2 = CASE WHEN ?2 IS NULL THEN col2 ELSE ?2 END,
...
WHERE id = ?5;