最近 使用 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;
}
});
添加事物管理后,就可以提交了。