Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ORMLite同时在表中写入多个项目_Java_Postgresql_Sqlite_Ormlite_Java Stored Procedures - Fatal编程技术网

Java 如何使用ORMLite同时在表中写入多个项目

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()循环,并逐个插入它们(在事务管理器中执行)。 当项目很少时,没有问题,但现在项目越来越多,这可能不是最好的方法,也因为我锁定数据库很长时间 我正在寻找一种

我在服务器和客户机制作的解决方案上使用ORMLite

在服务器端我使用PostgreSql,在客户端我使用SQLite。 在代码中,我使用相同的ORMLite方法,而不考虑所管理的数据库(PostgreSql或SQLite)

比如说:

  • 表A对应于A类
  • 我有一个对象的数组列表
  • 我想在DB中插入ArrayList的所有项
今天,我使用for()循环,并逐个插入它们(在事务管理器中执行)。 当项目很少时,没有问题,但现在项目越来越多,这可能不是最好的方法,也因为我锁定数据库很长时间

我正在寻找一种方法,在一个步骤中插入所有项目,以便快速进行,避免长时间锁定数据库。我知道它应该是一种存储过程(我不是专家…)

需要注意的是,某些项可能是新的(即它不存在,并且已经存在具有相同主键id的项),然后必须执行并插入;其他项目可能存在,因此应在更新时执行


谢谢

您可以使用
entityManager.merge([项目列表])
entityManager将一次性插入列表

合并如果对象在数据库中不存在,则创建该对象;如果对象已存在,则更新该对象

我正在寻找一种方法,在一个步骤中插入所有项目,以便快速进行,避免长时间锁定数据库

我知道有两种方法可以做到这一点:事务和禁用自动提交。如果要插入到数据库中,并且从一致性的角度来看需要“一次”完成,那么事务是唯一的方法。如果您只想以更高的性能插入和更新大量记录,那么可以禁用自动提交,执行操作,然后提交。根据数据库实现,这就是
TransactionManager
真正要做的事情

我知道它应该是一种存储过程

我看不出存储过程对您有什么帮助。它们不是魔法

但现在项目越来越多,这可能不是最好的方式,也因为我锁定数据库很长时间

我不认为有什么神奇的解决办法。如果要将大量对象推送到数据库,并且需要数据是事务性的,那么在更新过程中必须保持锁。需要认识到的一点是,postgres应该比Sqlite更好地处理这个问题。Sqlite没有(我不认为)行级锁定,这意味着整个数据库在事务期间暂停。Postgres有一个更成熟的锁定系统,在这种情况下应该更有效。这也是Sqlite在许多其他操作中速度如此之快的原因,因为它不必承受锁的复杂性

要考虑的是重建你的模式。尝试找出需要以事务方式插入的最小数据量。例如,可能只需要以事务方式更改对象关系,但所有数据都可以稍后存储。例如,您可以有一个
AccountOwner
对象,该对象只有两个ID,而有关
帐户的所有信息都可以存储在事务之外。这使您的模式更加复杂,但可能更快


希望这里有帮助。

您好,谢谢您的回复,我正在浏览Google,但我不知道ORMLite Java是否提供此功能。如果是这样的话,您建议使用哪个库(file.jar)?非常感谢格雷,我会研究您的解决方案并应用它。