1


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) を返します。
            }
        });
    }
4

0 に答える 0