/**
 * 执行无返回值的SQL语句
 */
public int executeUpdate(String sql, Object[] obj) throws SQLException {
int ri = 0;
try {
pstm = con.prepareStatement(sql);
for (int i=0; i<obj.length; i++) {
pstm.setObject(i+1, obj[i]);
}
ri = pstm.executeUpdate();
} catch (Exception e) {
log.error("执行"+sql+"出错!", e);
e.printStackTrace();
} finally {
baseConnect.backConnection(con);
}
return ri;
}
上面这方法可以添加、修改和删除记录这个方法是不是要加“synchronized”呢
如果不加,会不会出现同时两个用户一个在修改,而另一个已经将此记录删除掉了,产生修改出错呢?求解答!!!

解决方案 »

  1.   

    确保每个线程使用独立的Connection就够了。至于你说的:“会不会出现同时两个用户一个在修改,而另一个已经将此记录删除掉了,产生修改出错呢?”
    跟并发无关,即便都是串行执行,也会存在这种风险;修改出错并不会导致数据不一致之类的问题,只不过就是个修改失败而已,所以根本不是问题。
      

  2.   

    每个用户一个可能也不能完全解决,看情况pstmt是全局的,每个线程都需要创建新的这个对象应该就没问题了
      

  3.   

    在你没有配置数据库连接池的情况下,每一次的连接都是新new出来的,连接对象都是不同
      

  4.   

    public synchronized Connection getConnection(){
    //从连接池中获取方法
    }
    从连接池中获取连接是加锁的
    这样符合1楼说的“每个线程使用独立的Connection”
      

  5.   

    楼主这个同步不是你考虑的范围哦,这个是数据库的事务和JDBC去控制的