java - 如何防止交易在捕获时关闭(异常 e)?

标签 java sql postgresql connection

我正在尝试从 java 运行一个查询到 PosgresSQL,但我从 stmt.execute(sql)

得到一个错误

我想执行一个新查询来帮助我打印出失败的特定行,但是当我到达 catch (Exception e) 时,事务中止了。

我无法创建新事务,因为我正在使用临时表。如何防止交易中止?

org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block

try (Statement stmt = data.db.getConnection().createStatement()) {
        //  data.db.getConnection().setSavepoint("sp01");
        // insert to fact table
        TableSchema factTableSchema = factInfo.getTableSchema();
        // build SQL
        String sql = "Select * From....";
        try {
            stmt.execute(sql); // this row is failing 
        }
        catch (Exception e) {
            try {
         // now i would like to run a query   only in case arrived here, but the transaction is closed
                      // how could i prevent from trasanction to close ?
                ResultSet rs = stmt.executeQuery(" SELECT Bla,Bla From..");
                Log.debug("");
            }
            catch (Exception e2) {
                Log.debug("");
            }
        }

最佳答案

在执行查询之前在第二个 try block 中创建一个新语句。

Statement stmt = data.db.getConnection().createStatement();
ResultSet rs = stmt.executeQuery(" SELECT Bla,Bla From..");

ResultSet 需要连接并处于 Activity 状态才能执行 next();

关于java - 如何防止交易在捕获时关闭(异常 e)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825574/

相关文章:

java - tensorflow.keras 在 python 中保存模型并在 Java 中加载

java - 在弹出窗口中获取值

sql - 查询仅具有非事件推送 token 的用户

php - 使用 PHP 将数据插入 MySQL 数据库

postgresql - 如何为现有的 postgres 数据库创建用户(读写和只读)和管理员角色?

python - Heroku教程运行python manage.py syncdb更新本地数据库报错

java - Java 字符串中正斜杠 ('\u002f' ) 的编码

java - 上传新的 .war 文件,但 tomcat 仍然以某种方式提供旧代码?

mysql - 将数据库中一个表中的特定行插入到具有不同列的另一个表中

sql - 在 2 个独立的数据库中查找唯一匹配项