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