Java 如何使用ORMLite同时在表中写入多个项目
我在服务器和客户机制作的解决方案上使用ORMLite 在服务器端我使用PostgreSql,在客户端我使用SQLite。 在代码中,我使用相同的ORMLite方法,而不考虑所管理的数据库(PostgreSql或SQLite) 比如说:Java 如何使用ORMLite同时在表中写入多个项目,java,postgresql,sqlite,ormlite,java-stored-procedures,Java,Postgresql,Sqlite,Ormlite,Java Stored Procedures,我在服务器和客户机制作的解决方案上使用ORMLite 在服务器端我使用PostgreSql,在客户端我使用SQLite。 在代码中,我使用相同的ORMLite方法,而不考虑所管理的数据库(PostgreSql或SQLite) 比如说: 表A对应于A类 我有一个对象的数组列表 我想在DB中插入ArrayList的所有项 今天,我使用for()循环,并逐个插入它们(在事务管理器中执行)。 当项目很少时,没有问题,但现在项目越来越多,这可能不是最好的方法,也因为我锁定数据库很长时间 我正在寻找一种
- 表A对应于A类
- 我有一个对象的数组列表
- 我想在DB中插入ArrayList的所有项
谢谢您可以使用
entityManager.merge([项目列表])代码>
entityManager将一次性插入列表
合并如果对象在数据库中不存在,则创建该对象;如果对象已存在,则更新该对象
我正在寻找一种方法,在一个步骤中插入所有项目,以便快速进行,避免长时间锁定数据库
我知道有两种方法可以做到这一点:事务和禁用自动提交。如果要插入到数据库中,并且从一致性的角度来看需要“一次”完成,那么事务是唯一的方法。如果您只想以更高的性能插入和更新大量记录,那么可以禁用自动提交,执行操作,然后提交。根据数据库实现,这就是TransactionManager
真正要做的事情
我知道它应该是一种存储过程
我看不出存储过程对您有什么帮助。它们不是魔法
但现在项目越来越多,这可能不是最好的方式,也因为我锁定数据库很长时间
我不认为有什么神奇的解决办法。如果要将大量对象推送到数据库,并且需要数据是事务性的,那么在更新过程中必须保持锁。需要认识到的一点是,postgres应该比Sqlite更好地处理这个问题。Sqlite没有(我不认为)行级锁定,这意味着整个数据库在事务期间暂停。Postgres有一个更成熟的锁定系统,在这种情况下应该更有效。这也是Sqlite在许多其他操作中速度如此之快的原因,因为它不必承受锁的复杂性
要考虑的是重建你的模式。尝试找出需要以事务方式插入的最小数据量。例如,可能只需要以事务方式更改对象关系,但所有数据都可以稍后存储。例如,您可以有一个AccountOwner
对象,该对象只有两个ID,而有关帐户的所有信息都可以存储在事务之外。这使您的模式更加复杂,但可能更快
希望这里有帮助。您好,谢谢您的回复,我正在浏览Google,但我不知道ORMLite Java是否提供此功能。如果是这样的话,您建议使用哪个库(file.jar)?非常感谢格雷,我会研究您的解决方案并应用它。