从java对象更新/合并SQLite DB表
这里有一个简单的例子来描述这个问题: 假设从SQLiteDB读取一个表并将其存储在Java集合对象中 DB表-->Java对象从java对象更新/合并SQLite DB表,java,sqlite,orm,collections,jdbc,Java,Sqlite,Orm,Collections,Jdbc,这里有一个简单的例子来描述这个问题: 假设从SQLiteDB读取一个表并将其存储在Java集合对象中 DB表-->Java对象 并通过sqlite jdbc库: Map objTable=newhashmap();/。。。通过添加一些jdbc内容,我们可以在objTable中获得DBTable的副本 然后,如果修改了对象,则被删除 idRecord | Data (modified table stored at objTable) 2 Two 4
并通过sqlite jdbc库: Map objTable=newhashmap();/。。。通过添加一些jdbc内容,我们可以在objTable中获得DBTable的副本 然后,如果修改了对象,则被删除
idRecord | Data (modified table stored at objTable)
2 Two
4 FourModified
5 Five
(id 1和3已删除,2保持不变,4已修改,5已添加)
Java对象-->DB表(这里是问题…)
如何更新/合并对象表与数据库? 为什么要合并而不是简单地将对象保存到表中? 我认为,如果表足够大,那么如果只修改了其中一些记录,那么写入所有记录是没有意义的
- 删除整个DBtable,并在(危险的同时)循环中遍历对象以写入新表
- 在第二个java obj中读取DBtable,然后比较两者(使用某种merge-alghoritm),并将操作(添加、删除、修改)直接应用于DB。(我愿意接受这种比较算法的建议)
- 编辑:首先不要创建集合,直接从DB读写,始终通过JDBC传递查询
- 其他更好的办法
感谢4Reading跟踪类似内容的ArrayList中已修改的记录。然后,当需要更新数据库时,只更新已修改的记录
您可以创建执行上述操作的基类,然后为架构中的每个表扩展它。您可以实现类似于Hibernate会话缓存(简化)行为的行为。内存表示可以保留一个“dirty”标志,指示数据库中哪些对象需要更新,哪些对象需要删除。根据分配ID所使用的算法(以应用程序为中心与以数据库为中心),您可以识别由特殊值(例如,0)添加的对象,或者将此信息保留在脏标志中
一个潜在的增强,是考虑急于(读取所有记录)与懒惰(读取记录根据需要)加载你的缓存。< /p> 在同一事务中的两个语句。(不幸的是,SQLite不支持重复密钥更新ish功能,但它是“Lite”:P)
首先,插入或忽略 然后 更新yourtable SET data=hashTableData,其中id=hashTableId和data!=哈希表数据 您可能能够识别哪些已被忽略。我会尝试做两个准备好的语句,我猜如果触发ignore子句,execute将返回false。试试看 如果是这种情况,那么在false上进行更新否则,对每个语句循环两次数据,并在完成转换后提交:)您的意思是说idTable是每个表的ID?数据是数据库中的表名吗?@harigm哦,不,这不是我的意图,我将其重命名为idRecord,这些都是非常简单的表,ThanksQlite确实接受插入或替换,这可能与重复键更新时所需的
行为相匹配。请看这里:这在这里并没有真正的帮助,因为他只需要更新数据!=hastTableDate,据我所知,INSERT或REPLACE不允许我检查(您可以使用INSERT、select和on dup键组合使用mysql)
idRecord | Data (modified table stored at objTable)
2 Two
4 FourModified
5 Five