ヘッダーをスキップ
Oracle TimesTen In-Memory Database TTClassesガイド
リリース7.0
E05171-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

TTStatus

TTStatusクラスは、TTClassesコレクション内の他のクラスで、エラーおよび警告をレポートするために使用されます。TTStatusは、ODBC関数SQLErrorの付加価値C++ラッパーとみなすことができます。

サブクラス

TTStatusには、次のサブクラスがあります。

TTError

TTErrorはTTStatusのサブクラスであり、ODBCエラー(リターン・コード: SQL_ERROR、SQL_INVALID_HANDLE)をカプセル化するために使用されます。

TTWarning

TTWarningはTTStatusのサブクラスであり、ODBC警告(リターン・コード: SQL_SUCCESS_WITH_INFO)をカプセル化するために使用されます。

通常、ODBC警告はODBCエラーほど深刻ではないため、異なるロジックで処理します。通常、ODBC警告はアプリケーションのログに記録するだけで十分ですが、ODBCエラーはプログラムで処理する必要があります。

パブリック・メンバー

メンバー
説明
rc
ODBCコールに失敗した場合のリターン・コードです。このフィールドの通常の値は、SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_NO_DATA_FOUNDおよびSQL_INVALID_HANDLEです。
native_error
ODBCコールに失敗した場合のTimesTenネイティブ・エラー番号(存在する場合)です。
odbc_error

ODBCコールに失敗した場合のODBCエラー・コードです。

err_msg

ODBCコールに失敗した場合のASCII形式の出力可能なエラー・メッセージです。

パブリック・メソッド

メソッド
説明
エラーをストリームに出力します。

ostream

friend ostream& operator<<(ostream&, TTStatus&)

例3.1

このメソッドを使用すると、エラーをストリームに出力できます。

TTStatus stat;

// ...

cerr << "Error fetching data: " << stat << endl;

使用方法

TTStatusオブジェクトは、TTEXCEPTプリプロセッサ変数を定義してライブラリがビルドされたかどうかに応じて、2つの異なる方法のいずれかで使用されます。TTEXCEPTを定義することはデフォルトであり、推奨されるTTClassesの使用方法です。

TTEXCEPTプリプロセッサ変数を定義してライブラリがビルドされた場合は、エラーが発生するたびに、TTStatusオブジェクトが例外としてスローされます。これによって、C++アプリケーションでC++の{try/catch}による障害の検出とリカバリが可能となり、ソース・コードが非常に読みやすくなります。

例3.2

次の例に、TTEXCEPTが定義されているTTStatusの使用方法を示します。

try {

cmd1.Prepare(&conn, "select * from foo", stat);

cmd2.Prepare(&conn, "insert into foo values(?,?,?)",

stat);

cmd3.Prepare(&conn, "update foo set x = ? where y=?",

stat);

conn.Commit(stat);

}

catch (TTStatus st) {

cerr << "Error preparing statements: " << st << endl;

// Rollback, exit(), throw -- whatever is appropriate

}

TTEXCEPTプリプロセッサ変数を定義しないでTTClassesがビルドされた場合は、ほとんどのメソッドのコールからTTStatusオブジェクトが(参照ごとに)返されます。コール元は、次の例に示すように、メソッドをコールするたびにエラーの有無を明示的にチェックする必要があります。

例3.3

次の例に、TTEXCEPTが定義されていないTTStatusの使用方法を示します。

TTStatus stat;

[...]

cmd1.Prepare(&conn, "select * from foo", stat);

if (stat.rc) {

cerr << "Error preparing statement: " << stat << endl;

// Rollback, exit(), throw -- whatever is appropriate

}

cmd2.Prepare(&conn, "insert into foo values(?,?,?)",

stat);

if (stat.rc) {

cerr << "Error preparing statement: " << stat << endl;

// Rollback, exit(), throw -- whatever is appropriate

}

cmd3.Prepare(&conn, "update foo set x = ? where y = ?",

stat);

if (stat.rc) {

cerr << "Error preparing statement: " << stat << endl;

// Rollback, exit(), throw -- whatever is appropriate

}

conn.Commit(stat) ;

if (stat.rc) {

cerr << "Error in commit: " << stat << endl;

// Rollback, exit(), throw -- whatever is appropriate

}

例外が有効な場合は、ODBCエラーが発生するとTTErrorオブジェクトが、ODBC警告が発生するとTTWarningsがスローされることに注意してください。

例3.4

次の例に、TTErrorおよびTTWarningとTTStatusの関連を示します。ここに示す2つのコード・フラグメントの動作は同じです。

// first code fragment: using TTStatus

try {

// some TTClasses method calls

}

catch (TTStatus st) {

if (st.rc == SQL_SUCCESS_WITH_INFO) {

cerr << "Warning encountered: " << st << endl;

}

else {

cerr << "Error encountered: " << st << endl;

}

}

// second code fragment: using TTError & TTWarning

try {

// some TTClasses method calls

}

catch (TTWarning warn) {

cerr << "Warning encountered: " << warn << endl;

}

catch (TTError err) {

cerr << "Error encountered: " << st << endl;

}