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

前へ
前へ
次へ
次へ
 

TTCmd、TTConnectionおよびTTStatusの使用

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

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

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

例4.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文を準備させます。

例4.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に付属するサンプル・プログラムのいくつかに見られます。最も簡単な例は、install_dir/demo/ttclasses/sample.cppです。

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