Microsoft JDBC ドライバーを使用しているときに、SQLException からLine、Level、State を取得できる方法はありますか?
以下は、isql または同様のツールからのエラー メッセージです。
メッセージ 156、レベル 15、状態 1、行 1 キーワード「FROM」付近の構文が正しくありません。
Java SQLException には、ex.getErrorCode()、ex.getMessage()、ex.getSQLState()、および toString() しかありませんが、上記のメソッドのいずれも「Line」、「Level」、「State」
を表示しません。次のことができる Sybase jConnect に接続します。
if (sqlex instanceof EedInfo) // jConnect からのメッセージ { EedInfo eedi = (EedInfo) sqlex; int msgNum = sqlex.getErrorCode(); int 重大度 = eedi.getSeverity(); int 状態 = eedi.getState(); int lineNumber = eedi.getLineNumber(); 文字列 procName = eedi.getProcedureName(); 文字列 srvName = eedi.getServerName(); }
または、「ライン、レベル、状態」の文字列を取得するだけで、文字列を解析してエラーの発生元のライン番号を取得できます。
ところで:MSSQL JDBCドライバーでSQLExceptionをSQLWarningにダウングレードできます
か?これは、Sybase jConnectで行う方法です
if (SybConnection のインスタンスを接続) { ((SybConnection)conn).setSybMessageHandler(new SybMessageHandler() { @オーバーライド public SQLException messageHandler(SQLException sqlex) { // ここで特定のエラー メッセージを除外できる場合... もし (sqlex.getErrorCode() == 9999) null を返します。 // またはメッセージを SQLWarnings にダウングレードして、実行が中断されないようにします。 AseConnectionUtils.sqlExceptionToWarning(sqlex) を返します。 } }); }