如何在Oracle Data Source连接中将autocommit值设置为false?

时间:2014-04-04 06:46:01

标签: java oracle autocommit

通过Spring配置文件注入的JdbcTemplate-OracleDataSource在Oracle 11g中插入值。 交易通过DataSourceTransactionManager管理的@Transactional完成。

问题1)如何将自动提交值设置为false?我猜,默认值为true。 以下是代码段:

    DataSource ds = (DataSource)ctx.getBean("dataSourceBean");
    try {
        ds.getConnection().setAutoCommit(false);
        System.out.println("Autocommit " +ds.getConnection().getAutoCommit());
    } catch (SQLException e) {          
        e.printStackTrace();
    }

println语句仅提供true

还在DAO类的insert方法中打印了getAutoCommit值。也有这样的事实。

问题2)对于唯一约束违规,我需要回滚。 在这种情况下,抛出DuplicateKeyException,它包含在SQLIntegrityConstraintViolationException上。 所以 @Transactional(rollbackFor =?.class)必须有哪个Exception?

2 个答案:

答案 0 :(得分:1)

1.将其存储在变量

DataSource ds = (DataSource)ctx.getBean("dataSourceBean");
try {
    Connection con =ds.getConnection();
    con.setAutoCommit(false);
    System.out.println("Autocommit " +con.getAutoCommit());
} catch (SQLException e) {          
    e.printStackTrace();
}

再次调用ds.getConnection()时,您将从池中获得另一个连接

2.更改Weblogic DataSource配置
Auto commit transactions if not explicitly committed or rolledback

答案 1 :(得分:1)

而是以编程方式执行,检查连接池是否可以选择在从池返回连接时将auto commit设置为false。 DBCP的BasicDataSource有这样的选项

如果抛出任何RuntimeException,Spring将执行回滚。