我有一个Java,它使用RESTful和ComboPooledDataSource进行连接池(http://www.mchange.com/projects/c3p0/),还有一个PreparedStatement,它通过递增一个字段来更新行:
public void update(int messageId) {
String UPDATE_STM = "UPDATE table SET count_field = count_field +1 WHERE id=?";
conn = ConnectionManager.getConnection();
PreparedStatement stm = conn.prepareStatement(UPDATE_STM );
stm.setInt(1, messageId);
stm.executeUpdate();
}(我省略了try/catch,ConnectionManager.getConnection()为我提供了池中的一个可用连接)。如果我的RESTful服务同时接收到两个或多个有关update()方法的请求,是否允许正确更新计数?如果不是,我应该如何修改代码以避免错误的计数更新?
发布于 2017-04-06 13:24:50
使用InnoDB
据我所见,您的Java代码是线程安全的,它不访问或更改任何字段。您要担心的就是数据库端的UPDATE操作。我想您使用的是MySQL,因为您已经用mysql标记了问题。MySql数据库管理系统提供ACID模型,您需要将数据库引擎设置为InnoDB才能工作。有关更多细节,请参见此链接。
https://stackoverflow.com/questions/43255306
复制相似问题