0
私は、Javaのコードは私のOracleデータベースに接続するには、Java 6とのojdbc14.jarを使用して、コードの下に使用したシーケンスIDを取得しようとして書かれている:ora-00604:包括的なSQLレベル1でエラーが発生しましたか?
long lNewAuditId = 0;
Statement stmt = null;
ResultSet result = null;
try {
stmt = argConnection.createStatement();
result = stmt.executeQuery(SQL_NEXT_AUDIT_ID);
if (!result.next())
throw new DAOException("Error obtaining new Audit Id - no result");
lNewAuditId = result.getLong(1);
m_logger.debug("Next Audit Id: " + lNewAuditId);
}
catch (SQLException sqle)
{
throw new DAOException("Error getting next Audit id", sqle);
}
finally
{
// do not close the connection here
close(result);
close(stmt);
}
私はきちんとSTMTを閉じてい願っています。このコードを実行している間、私は以下の問題に直面しています:あなたは根本的なエラーが表示された場合
java.sql.SQLException: ORA-01000: maximum open cursors exceeded
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:957)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1062)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:841)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1134)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1274)
あなたの声明、あなたの '近い()'メソッド、あなたの例外がある実際の場所を表示しません:あなたは、DBAアクセス権を持っている場合
は、あなたがオープン・カーソルを取得するには、次のクエリを使用することができます生成されたので、答えを出すのは難しいです。しかし、コードは無害に見えます。私はデータベースにカーソルをリストします。ドライバのバグにもなります(たとえば、DBメタデータのgetTablesには12.1.0.2ドライバのカーソルリークがあります)。 – eckes
クエリで再帰呼び出しが生成されます。さらに、ログにはコード内でexecuteQuery()を呼び出すときに呼び出されるexecuteUpdate()メソッドがあります。どうして ?たぶんあなたの質問でそのことを説明できるかもしれません。したがって、クエリと** whole ** stacktraceを表示する必要があります。 – davidxxx
正しいログをここに追加しました。私のcloseメソッドはstmt.close()を呼び出すことによってstmtを終了しています。私のデータベースはOracle 12cおよびJavaバージョン1.6で、ojdbc14.jarを使用しています。 –