数据库操作期间的异常处理

时间:2015-02-12 14:54:10

标签: java exception-handling sonarqube

我有点好奇在下面的代码片段中知道,是否有任何数据库连接未被关闭的可能性。我在SonarQube中遇到问题告诉"方法可能无法关闭数据库资源"

   try {       
        con = OracleUtil.getConnection();
        pstmtInsert = con.prepareStatement(insertUpdateQuery);
        pstmtInsert.setString(++k, categoryCode);
        pstmtInsert.clearParameters();
        pstmtInsert = con.prepareStatement(updateQuery);
        for (i = 0; i < userList.size(); i++) {
            pstmtInsert.setString(1, p_setId);
            addCount = pstmtInsert.executeUpdate();
            if (addCount == 1) {
                con.commit();
                usercount++;
            } else {
                con.rollback();
            }
        }
    }

    catch (SQLException sqle) {
        _log.error(methodName, "SQLException " + sqle.getMessage());
        sqle.printStackTrace();
        EventHandler.handle();//calling event handler
        throw new BTSLBaseException(this, "addInterfaceDetails", "error.general.sql.processing");
    }

    catch (Exception e) {
        _log.error(methodName, " Exception " + e.getMessage());
        e.printStackTrace();
        EventHandler.handle();//calling event handler
        throw new BTSLBaseException(this, "addInterfaceDetails", "error.general.processing");
    }

    finally {

        try {
            if (pstmtInsert != null) {
                pstmtInsert.close();
            }
        } catch (Exception e) {
            _log.errorTrace(methodName, e);
        }
        try {
            if (con != null) {
                con.close();
            }
        } catch (Exception e) {
            _log.errorTrace(methodName, e);
        }

        if (_log.isDebugEnabled()) {
            _log.debug("addRewardDetails", " Exiting addCount " + addCount);
        }
    }

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您使用的是Java 7+,我建议您使用try-with-resources。它确保在操作完成后关闭资源。

答案 1 :(得分:0)

当我在开始另一个准备声明之前关闭第一个准备声明时,问题已得到解决。

在pstmtInsert.clearParameters();

行之后的代码段下面添加了
    try {
            if (pstmtInsert != null) {
                pstmtInsert.close();
            }
        } catch (Exception e) {
            _log.errorTrace(methodName, e);
        }