我已配置数据源并将auto commit设置为false。
<bean id="dbDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${widget.database.driver}" />
<property name="url" value="${widget.database.url}" />
<property name="defaultAutoCommit" value="false" />
<property name="accessToUnderlyingConnectionAllowed" value="true" />
<property name="username" value="${widget.database.username}" />
<property name="password" value="${widget.database.password}" />
<property name="maxActive" value="${widget.database.maxActive}" />
<property name="maxIdle" value="${widget.database.maxIdle}" />
</bean>
在我的DAO中,我已经完成了。
public void insertDIMFactToDB(WidgetJobOutput jobOutput) throws DataAccessException {
int rowsInserted=0;
try {
logger.info("Databse insert for DIMCODE " + jobOutput.getDimCode() + " having DIMFACT value as : " + + jobOutput.getDimFact());
jdbcTemplate = new JdbcTemplate(dataSource);
Object[] params = new Object[] {
jobOutput.getDimCode(),
jobOutput.getDimFact()
};
rowsInserted = jdbcTemplate.update(DBConstants.INS_WIDGET_HRLY_DATA,
params);
//logger.info("Successfully inserted/updated " + rowsInserted + " in DB");
} catch (DataAccessException e) {
throw e ;
}
// commit everything
try {
DataSourceUtils.getConnection(jdbcTemplate.getDataSource()).commit();
logger.info("Successfully inserted/updated " + rowsInserted + " in DB");
} catch (SQLException e) {
logger.error("Error Occured while commiting data into DB:-"+ ExceptionUtils.getFullStackTrace(e));
}
}
但它既没有抛出任何异常,也没有提交数据。 请帮我找到bug.Thanks提前
答案 0 :(得分:1)
我们也需要查看DAO源代码,但似乎您提交的是与正在执行SQL的连接的不同连接。
dataSource.getConnection().commit();
将从您的池中获取下一个可用连接,该连接将不是您刚刚用于更新的连接(因为该连接可能仍在使用中)。
答案 1 :(得分:1)
下面的语句将为您提供一个新连接,并尝试在该连接上提交。但是,您希望提交用于运行查询的相同连接。
JdbcTemplate().getDataSource().getConnection().commit();
如果要在数据源属性配置中将AutoCommit用作false,请尝试使用旧式的提交方式
Connection conn = null;
PreparedStatement stmt = null;
boolean result = false;
try{
conn = getJdbcTemplate().getDataSource().getConnection();
stmt = conn.prepareStatement(sql.toString());
// stmt.setString(1, "ABC");
result = stmt.executeUpdate();
conn.commit();
} catch (SQLException e) {
// LOGGER.error();
}finally{
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
// LOGGER.error();
}
}
}