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

前へ
前へ
次へ
次へ
 

コアTTClasses(TTCmd、TTConnection、TTStatus)の推奨される使用方法

TTClassesは様々な方法で使用が可能ですが、次の一般的なアプローチは、多くのプロジェクトでの成功実績があり、様々なアプリケーションに簡単に適用できます。

リアルタイム・アプリケーションでは、最適なパフォーマンスを得るために、準備済のSQL文を排他的に使用する必要があります。アプリケーションで使用されるすべてのSQL文について、文ごとに個別のTTCmdオブジェクトを使用して、アプリケーションの開始時に準備するのが理想的です。ODBCでは(したがってC++クラスでも)、文が特定の接続にバインドされるので、アプリケーションで使用されるすべての文の完全なセットが、TimesTen Databaseとのあらゆる接続に関連付けられるということがよく起こります。

最適なパフォーマンスを簡単に実現する方法は、TTConnectionから導出したアプリケーション固有のクラスを開発することです。たとえば、「XYZ」という名前のアプリケーションに対して、TTConnectionから導出した「XYZConnection」という名前のクラスを作成します。XYZConnectionクラスには、アプリケーションで使用できる準備済のSQL文を表すプライベートTTCmdメンバーが含まれます。さらに、XYZConnectionクラスでは、このプライベートTTCmdメンバーを使用して、アプリケーション固有のデータベース機能を実装する新しいパブリック・メソッドを提供します。

例として、次のようなクラスを想定します。

例1.1 TTConnectionから継承されるサンプル・クラス
class XYZConnection : public TTConnection {
private:
TTCmd updateData;
TTCmd insertData;
TTCmd queryData;
public:
XYZConnection();
~XYZConnection();
virtual void Connect (const char* connStr,TTStatus&);
void updateUser (TTStatus&);
void addUser (char* nameP, TTStatus&);
void queryUser (const char* nameP, int* valueP,
TTStatus&);
};

この例では、XYZConnectionオブジェクトが、アプリケーション固有の3つの操作(addUser、updateUserおよびqueryUser)の実行に使用できるTimesTenへの接続となっています。これらの操作はアプリケーション固有のものです(預金残高の格納など)。この3つのメソッドの実装では、アプリケーションの特定の機能を実装するために、クラス内で提供されるupdateData、insertDataおよびqueryData TTCmdオブジェクトが使用される可能性があります。

アプリケーションで使用するSQL文を準備させるために、XYZConnectionクラスはTTConnection基本クラスによって提供されるConnectメソッドをオーバーロードします。XYZConnection::Connect()メソッドは、(実際にデータベース接続を確立するために)基本クラスのConnectメソッドをコールしますが、TTCmdオブジェクトごとにPrepareメソッドもコールして、後で使用するSQL文を準備させます。

例:

例1.2 クラスXYZConnectionのConnectメソッド
void
XYZConnection::Connect(const char* connStr, TTStatus&
stat)
{
TTStatus stat2;
try {
TTConnection::Connect(connStr, stat);
updateData.Prepare(this,
"update mydata v
"set foo = ? where bar = ?",
stat);
insertData.Prepare(this,
"insert into mydata "
"values(?,0)", stat);
queryData.Prepare(this,
"select i from mydata where name "
" = ?", stat);
Commit(stat);
}
catch (TTStatus st) {
cerr << "Error in XYZConnection::Connect: " << st
<< endl;
Rollback(stat2);
}
return;
}

このConnectメソッドによって、XYZConnectionが完全に操作可能になります。Connectがコールされた後に、アプリケーション固有のメソッドが完全に機能します。

このアプリケーション設計のアプローチは、TTConnectionPoolの設計でうまく機能します。アプリケーションでは、XYZConnection型のオブジェクトを多数作成し、それらをTTConnectionPoolに追加できます。アプリケーションはその後、TTConnectionPool::ConnectAll()をコールすることで、コード内の単一行において、プール内のすべての接続をデータベースに接続させるとともに、すべてのSQL文を準備させることができます。

このアプリケーション設計のアプローチによって、アプリケーションのデータベース・コンポーネントをアプリケーションの残りの部分から分離できます。つまり、XYZConnectionクラス(または、ご使用のアプリケーションでのバージョン)のみにデータベース固有のコードが含まれます。

このタイプの設計例は、TTClassesに付属するサンプル・プログラムのいくつかに見られます。最良かつ最も簡単な例は、<demo/ttclasses/sample.cpp>です。

他の構成が可能なことに注意してください。アプリケーションで使用されるSQL文が、アプリケーション自体にハードコードされるのではなく、データベース内の表にリストされるよう、このスキームをさらに拡張したユーザーもいます。このようにすれば、アプリケーションの変更ではなくデータベースの変更によって、データベースの機能の変更を実装できます。