这里是描述问题的最小示例:
假设从 SQLiteDB 中读取一个表并将其存储在 Java Collection 对象中
数据库表--->Java对象
idRecord | Data (table stored at DB)
1 One
2 Two
3 Three
4 Four
并通过 sqlite jdbc 库:
Map objTable = new HashMap();//...添加一些 jdbc 的东西,我们在 objTable 中获得了 DBTable 的副本
然后如果object被修改,因此是。
idRecord | Data (modified table stored at objTable)
2 Two
4 FourModified
5 Five
(删除id 1和3,2保持不变,修改4,增加5)
Java Object-->DB表(这里是问题...)
如何使用数据库更新/合并对象表?
为什么我要合并而不是简单地将对象保存到表?
我认为,如果表足够大,那么如果只修改其中一些记录,则写入所有记录是没有意义的。
删除整个 DBtable 并在(同时危险的)循环中遍历对象以写入新表。
读取第二个 java obj 中的 DBtable,然后比较两者(使用某种合并算法)并将操作(ADD、DELETE、MODIFY)直接应用于 DB。 (我会接受对该比较算法的推荐)
编辑: 首先不要创建集合,直接从 DB 读取和写入,始终通过 JDBC 传递查询
其他更好的方法
感谢阅读
最佳答案
同一事务中的两条语句。 (不幸的是,SQLite 不支持 ON DUPLICATE KEY UPDATE ish 功能,但是嘿,它是“精简版”:P)
首先,插入或忽略 然后 更新你的表 SET data=hashTableData WHERE id=hashTableId AND data != hashTableData
您可能能够识别哪些已被忽略。我会尝试做两个准备好的语句,我猜如果忽略子句被触发,execute 将返回 false。试试看。
如果是这样,则对 false 进行更新。
否则,为每个语句循环两次数据并在完成后提交转换:)
关于java - 从 Java 对象更新/合并 SQLite 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331926/