有一个包含许多对象的集合。集合显示在表格中。离线用户可以添加和删除记录,以及通过SELECT * FROM ...
更新以前收到的记录我想实现“保存所有”功能,程序将遍历所有集合并更新数据库中的记录(如果存在),并添加新记录(如果不存在)。
熟悉以下解决方案(在Java方面):
@Override
public void updateAll(List<User> users)
{
//online
Connection connection = null;
PreparedStatement statement = null;
try
{
connection = Database.getInstance().getConnection();
connection.setAutoCommit(false);
for (User user : users)
{
statement = connection.prepareStatement(""); //THIS IS WHERE A CORRECT QUERY SHOULD BE CREATED
statement.execute();
}
connection.commit();
}
catch (SQLException ex)
{
Log.error("Unable to updateAll users. " + ex.getMessage());
}
finally
{
Database.closeQuietly(statement);
Database.closeQuietly(connection);
}
}
由于该表的内容可能会进行重大更新,但是有必要快速保存,因此我禁用了自动提交功能,并一次发送了一大批请求。
现在有关请求本身...我found PostgreSQL支持我需要的功能:
INSERT INTO the_table (id, column_1, column_2)
VALUES (1, 'A', 'X'), (2, 'B', 'Y'), (3, 'C', 'Z')
ON CONFLICT (id) DO UPDATE
SET column_1 = excluded.column_1,
column_2 = excluded.column_2;
立即出现了几个问题: