java - 从 Java 对象更新/合并 SQLite 数据库表

标签 java sqlite orm collections jdbc

这里是描述问题的最小示例:

假设从 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/

相关文章:

java - 获取indextOutOfBoundException

java - FlatMapFunction 没有定义serialversionUid

python - 强制 Python 放弃原生 sqlite3 并使用(已安装)最新的 sqlite3 版本

android - Android 版 SQLite 中的小写字母

java - 如何使用 iciql 模型生成

c# - 在 DDD 中拥有独立的领域模型和持久性模型

java - 我如何在给出答案后 5 秒循环我的程序

python - 如何将 "inject"内存中的 SQLAlchemy sqlite3 数据库放入 Flask test_client?

java - Hibernate : many to many linker table, 最佳 OO 设计

java - 在 Java 中使用 StreamWriter.close()