エラーおよび警告の取得
この項では、JDBCおよびODBCでネイティブ・エラー・コードとメッセージを取得する方法について説明します。
JDBCでのネイティブ・エラー・コードおよびメッセージの取得
この例に示すとおり、JDBCでは、ネイティブ・エラー・コードおよびメッセージを取得できます。
private static void printSQLExceptions(SQLException e)
{
while (e != null) {
System.out.println("SQLState: " +
e.getSQLState());
System.out.println("Message : " +
e.getMessage());
System.out.println("Vendor : " +
e.getErrorCode());
e.printStackTrace();
e = e.getNextException();
System.out.println("");
}
e.printStackTrace();
}
. . .
try {
// JDBC method calls here
}
catch (SQLException ex) {
ex.printSQLExceptions();
}
単一のJDBC操作で複数のエラーが発生する可能性があります。 これらのエラーは、JDBCメソッドSQLException
への複数のコールを使用して取得できます。
ODBCでのネイティブ・エラー・コードおよびメッセージの取得
ODBCでは、次の例に示すように、SQLError
関数を使用してネイティブ・エラー・コードおよびメッセージを取得できます:
#define MSG_LNG 512
SQLCHAR szSqlState[MSG_LNG]; /* SQL state string */
SQLINTEGER pfNativeError; /* Native error code */
SQLCHAR szErrorMsg[MSG_LNG];
/* Error msg text buffer pointer */
SQLSMALLINT pcbErrorMsg;
/* Error msg text Available bytes */
SQLRETURN ret = SQL_SUCCESS;
while ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) {
ret = SQLError(henv, hdbc, hstmt, szSqlState, &pfNativeError,
szErrorMsg, MSG_LNG, &pcbErrorMsg);
switch (ret) {
case SQL_SUCCESS:
fprintf(stderr, "*** %s\n*** ODBC Err = %s, ",
"TimesTen Err = %ld\n",
szErrorMsg, szSqlState, pfNativeError);
break;
case SQL_SUCCESS_WITH_INFO:
fprintf(stderr, "*** Call to SQLError failed with return ",
"code of SQL_SUCCESS_WITH_INFO.\n ",
"*** Need to increase size of ",
"message buffer.\n");
break;
case SQL_INVALID_HANDLE:
fprintf(stderr, "*** Call to SQLError failed with ",
"return code of SQL_INVALID_HANDLE.\n");
break;
case SQL_ERROR:
fprintf(stderr, "*** Call to SQLError failed with ",
"return code of SQL_ERROR.\n");
break;
case SQL_NO_DATA_FOUND:
break;
}
}
1つのODBC操作で複数のエラーが発生する可能性があります。 これらのエラーは、ODBC関数SQLError
への複数のコールを使用して取得できます。