spring JdbcTemplate 不提交的问题

最近 使用  spring3 的 JdbcTemplate  的模板,对 insert,update 语句进行操作时,发现数据库中数据没有变化。代码如下:

final String name ="name";

final int id =2;

int count = this.getJdbcTemplate().update(new PreparedStatementCreator() {
   @Override
   public PreparedStatement createPreparedStatement(Connection conn)
     throws SQLException {
   //  String sql ="insert into test(id,name) values(?,?)";
    String sql = "update test set name=? where id=?";
    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setString(1, name);
    pst.setInt(2, id); 
    return pst;
   }
  });

数据库连接配置:

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" /> 

  <property name="initialSize" value="${dbcp.initialSize}" />
  <property name="maxActive" value="${dbcp.maxActive}" />
  <property name="maxIdle" value="${dbcp.maxIdle}" />
  <property name="defaultAutoCommit" value="false" />

</bean>

sql 语句正常执行,但是数据库中数据没有变化。经过分析原因出在<property name="defaultAutoCommit" value="false" />  这个配置参数上。把参数值修改为 true 就可以提交数据了。

不修改<property name="defaultAutoCommit" value="false" />   这个参数配置, 添加spring事物管理就提交数据了。

代码如下:

 TransactionTemplate ttt = new TransactionTemplate(transactionManager);
  ttt.execute(new TransactionCallback<Object>() {
   @Override
   public Object doInTransaction(TransactionStatus ts) {
    int count = getJdbcTemplate().update(
      new PreparedStatementCreator() {
       @Override
       public PreparedStatement createPreparedStatement(
         Connection conn) throws SQLException {
        // String sql
        // ="insert into test(id,name) values(?,?)";
        String sql = "update test set name=? where id=?";
        PreparedStatement pst = conn
          .prepareStatement(sql);
        pst.setString(1, "name");
        pst.setInt(2, 1);
        return pst;
       }
      });
    
    return null;
   }
  });

添加事物管理后,就可以提交了。

猜你喜欢

转载自gjp014.iteye.com/blog/2215298