1

无论如何我可以
在使用 Microsoft JDBC 驱动程序时从 SQLException 中获取:行、级别、状态?

以下是来自 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 state = eedi.getState();
        int lineNumber = eedi.getLineNumber();
        String procName = eedi.getProcedureName();
        字符串 srvName = eedi.getServerName();
    }

或者只是获取一个带有“Line, Level, State”的字符串,然后我可以解析该字符串以获取错误来源的行号。

顺便说一句:您可以在 MSSQL JDBC 驱动程序中将 SQLException 降级为 SQLWarning
在 Sybase jConnect 中您将如何做到这一点

    if (conn instanceof SybConnection)
    {
        ((SybConnection)conn).setSybMessageHandler(新 SybMessageHandler()
        {
            @覆盖
            公共 SQLException 消息处理程序(SQLException sqlex)
            {
                // 如果在这里你可以过滤掉特定的错误信息...
                if (sqlex.getErrorCode() == 9999)
                    返回空值;

                // 或将消息降级为 SQLWarnings,因此不会中断执行。
                返回 AseConnectionUtils.sqlExceptionToWarning(sqlex);
            }
        });
    }
4

0 回答 0