2.6.1 レコードの検索

<この項の構成>
(1) DBStatementクラスを利用した検索
(2) DBPreparedStatementクラスを利用した検索
(3) 検索結果の確認

(1) DBStatementクラスを利用した検索

レコードの検索にはSQL文のSELECT文を使います。DBStatementクラスを使用する場合, SELECT文中に?パラメタを指定できません。

アプリケーションでは, DBConnectionオブジェクトのCreateStatementメソッドを呼び出して, DBStatement オブジェクトを生成し,Executeメソッドの引数としてSELECT文を指定します。

ロック方法は,SetResultSetTypeメソッドで設定し,一度にResultSetに読み込むレコードの最大数は,SetMaxRowsメソッドを使って設定します。

レコードの検索は,DBStatementオブジェクトのGetResultSetメソッドを呼び出して,検索結果をResultSetに得ます。

//////////////////////////////////////////////////////////////
/// SQLの実行(検索)  ?パラメタを使用しない

DBStatement*                pStatement;
DBResultSet*                pResultSet;

                      // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
                      // 排他オプションの設定
pStatement->SetResultSetType(TYPE_NONE);
                      // SELECT文の設定
pStatement->Execute("SELECT F1, F2 FROM TABLE1");
                      // レコードの検索
pResultSet = pStatement->GetResultSet();
.....

(2) DBPreparedStatementクラスを利用した検索

SQL文のSELECT文中に?パラメタを指定した検索には,DBPreparedStatementクラスを使用します。

アプリケーションでは, DBConnectionクラスのCreatePreparedStatementメソッドの引数としてSQL文を指定して,DBPreparedStatement オブジェクトを生成し,Executeメソッドでデータベースへ通知(SQL文の解析)します。その後,?パラメタへの値を, SetParamメソッドで設定します。

ロック方法は,SetResultSetTypeメソッドで設定し,一度にResultSetに読み込むレコード数の最大値は,SetMaxRowsメソッドを使って設定します。

レコードの検索は,GetResultSetメソッドを呼び出して,検索結果をResultSetに得ます。

//////////////////////////////////////////////////////////////
/// SQLの実行(検索)  ?パラメタを使用

DBPreparedStatement*        pStatement;
DBResultSet*                pResultSet;
                  :
                  :
// DBPreparedStatementオブジェクトを生成。
// このとき,SQL文に?パラメタを設定
pStatement=pConnect->CreatePreparedStatement
("SELECT * FROM TABLE1 ID > ? AND ID < ? ");
pStatement->Execute();                           // SQL文の実行
pStatement->SetParam(1,100);
                          // SetParamで?パラメタに対する値の設定
pStatement->SetParam(2,300);
pResultSet = pStatement->GetResultSet();       // レコードの検索

(3) 検索結果の確認

レコードの検索結果は,DBResultSetオブジェクトのIsEOFメソッドを使って確認します。判定がFALSEであれば,ResultSetにデータが読み込まれています。

又は,DBResultSetオブジェクトのGetRowCountメソッドでレコード数を調べられます。

(例1)IsEOFを使った場合

pResultSet = pStatement->GetResultSet();        // レコードの検索
if (pResultSet->IsEOF())                        // 検索結果の確認

(例2) GetRowCountを使った場合

pResultSet = pStatement->GetResultSet();        // レコードの検索
RCount=pResultSet->GetRowCount();               // 検索結果の確認