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
Java 在JDBC中用postgres锁定表_Java_Postgresql_Jdbc_Transactions_Locking - Fatal编程技术网

Java 在JDBC中用postgres锁定表

Java 在JDBC中用postgres锁定表,java,postgresql,jdbc,transactions,locking,Java,Postgresql,Jdbc,Transactions,Locking,这是一个关于使用JDBC在postgres数据库中锁定表的快速问题。我有一个表,我想为其添加一个新记录,但是,为了对主键执行此操作,我使用一个递增的整数值 我希望能够在Java中检索此列的最大值,并将其存储为变量,以便在添加新行时用作新的主键 这给了我一个小问题,因为这将被建模为一个多用户系统,当两个位置请求相同的最大值时会发生什么?这当然会在尝试添加相同的主键时产生问题 我意识到我应该在表上使用独占锁,以防止在获取密钥和添加新行时读或写。然而,我似乎找不到任何方法来处理JDBC中的表锁定,只是

这是一个关于使用JDBC在postgres数据库中锁定表的快速问题。我有一个表,我想为其添加一个新记录,但是,为了对主键执行此操作,我使用一个递增的整数值

我希望能够在Java中检索此列的最大值,并将其存储为变量,以便在添加新行时用作新的主键

这给了我一个小问题,因为这将被建模为一个多用户系统,当两个位置请求相同的最大值时会发生什么?这当然会在尝试添加相同的主键时产生问题

我意识到我应该在表上使用独占锁,以防止在获取密钥和添加新行时读或写。然而,我似乎找不到任何方法来处理JDBC中的表锁定,只是标准事务

psuedo代码本身:

primaryKey = "SELECT MAX(id) FROM table1;";
primary key++;
//id retrieved again from 2nd source

"INSERT INTO table1 (primaryKey, value 1, value 2);"

你完全正确,如果两个位置同时请求,你将遇到比赛情况

处理这个问题的方法是在postgres中创建一个,并选择nextval作为主键

我不知道您正朝哪个方向前进,也不知道您如何处理数据,但您也可以将该列设置为,甚至不在insert查询中包含该列。该列将自动递增