TTClassesは様々な方法で使用が可能ですが、次の一般的なアプローチは、多くのプロジェクトでの成功実績があり、様々なアプリケーションに簡単に適用できます。
リアルタイム・アプリケーションでは、最適なパフォーマンスを得るために、準備済のSQL文を使用する必要があります。アプリケーションで使用されるすべてのSQL文について、文ごとに個別のTTCmdオブジェクトを使用して、アプリケーションの開始時に準備するのが理想的です。ODBCでは(したがってC++クラスでも)、文が特定の接続にバインドされるので、アプリケーションで使用されるすべての文の完全なセットが、TimesTen Databaseとのあらゆる接続に関連付けられるということがよく起こります。
最適な性能を簡単に実現する方法は、TTConnectionから導出されるアプリケーション固有のクラスを開発することです。たとえば、XYZ
という名前のアプリケーションに対して、TTConnectionから導出したXYZConnection
という名前のクラスを作成できます。XYZConnection
クラスには、アプリケーションで使用できる準備済のSQL文を表すプライベートTTCmdメンバーが含まれます。さらに、XYZConnection
クラスでは、このプライベートTTCmdメンバーを使用して、アプリケーション固有のデータベース機能を実装できる新しいパブリック・メソッドを提供します。
次に、自分の機能を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文を準備させます。
次の例に、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文が、アプリケーション自体にハードコードされるのではなく、データベース内の表にリストされるよう、このスキームをさらに拡張したユーザーもいます。このようにすれば、アプリケーションの変更ではなくデータベースの変更によって、データベースの機能の変更を実装できます。