【发布时间】:2017-09-01 11:47:48
【问题描述】:
我有一个 Java RESTful API,它使用 JDBC 和 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() 方法请求,我是否允许正确更新计数? 如果不是,我应该如何修改代码以避免错误的计数更新?
【问题讨论】:
-
将此类设为单例并将同步添加到方法声明中。但是增量值的最佳解决方案是使用数据库构建工具,如序列