如何增加SQL_ACTIVE_STATEMENTS LIMIT

时间:2014-02-06 16:10:39

标签: java teradata

我的代码适用于少量查询

for (int i = 0 ; i < queries.length ; i ++ ) {
        PreparedStatement stmt=conn.prepareStatement(queries[i]);
        if (queries[i].toUpperCase().contains("SELECT ") && !queries[i].toUpperCase().contains("CREATE ") && !queries[i].toUpperCase().contains("DROP ") && !queries[i].toUpperCase().contains("DELETE "))
        {  rs=stmt.executeQuery(); }
        else {stmt.executeUpdate();}
    }

我猜到了第16个声明,我发现了以下错误

Exception in thread "main" java.sql.SQLException: 
[Teradata][ODBC Teradata Driver] Beyond SQL_ACTIVE_STATEMENTS limit

如何增加SQL_ACTIVE_STATEMENTS限制

我试过

    Connection conn = DriverManager.getConnection(conUrl,user,password);
    conn.setHoldability(20);
    conn.setClientInfo( // 

1 个答案:

答案 0 :(得分:1)

你问的是错误的问题。你的问题不是修改SQL_ACTIVE_STATEMENTS LIMIT(btw看起来像一个常量,因此无法更改)但是在你使用完毕后关闭每个语句。

public static void main(String[] args) throws SQLException {
    for (int i = 0; i < queries.length; i++) {
        PreparedStatement stmt = conn.prepareStatement(queries[i]);
        try {          
            if (queries[i].toUpperCase().contains("SELECT ") && !queries[i].toUpperCase().contains("CREATE ") && !queries[i].toUpperCase().contains("DROP ") && !queries[i].toUpperCase().contains("DELETE ")) {
                rs = stmt.executeQuery();
            } else {
                stmt.executeUpdate();
            }
        } finally {
            stmt.close();
        }
    }
}

请记住,关闭一个语句也会关闭任何关联的ResultSet(这不是你在任何地方都没有声明的。)