/
Database Access
Database Access
Platform 4.5+ が必要
SQL データソースへのアクセス
Nexaweb 4.5 では、アプリケーションをデータベースに接続して次の操作を実行可能にする SQL (JDBC (Java Database Connectivity)) データサービスを提供します。
- クライアント UI で、データベースからのデータを入力および変更する
- データベースで、クライアント UI からのデータを入力および変更する
SQL データサービスを使用するには、次の作業を行う必要があります。
- クライアントアプリケーションにデータサービス プラグインを追加する
- サーバー上の nexaweb-sql.xml ファイルで次のものへの接続を作成する
- 特定の外部データベース
- 接続プール
- SQL 文を次の方法で定義する。
- dataRequestDefinitions で参照するために nexaweb-sql.xml ファイルで定義する
- nexaweb-data.xmlファイルの dataRequestDefinitions で直接定義する
- クライアント UI ファイルの埋め込みの serviceRequests で定義する
SQL データ サービスの構成
SQL データ サービスのコンフィギュレーション ファイル nexaweb-sql.xml には、次のセクションが含まれます。
コンフィギュレーション セクション | 説明 |
connectionDefinitions | クライアント アプリケーションが外部データへの SQL データ サービス リクエストを実行できるように接続を定義します。 |
dataSourceConnectionDefinition | クライアントが接続を取得できる J2EE データ ソースを定義します。J2EE データソースを使用すると、アプリケーションが JDBC オプションパッケージ javax.sql を通じて使用可能なネイティブ ドライバの接続プールを利用できるようになります。 |
statementDefinitions | サーバー上で定義された SQL 文のタイプを示します。このタイプは、アプリケーションが外部データにアクセスする際に参照によって使用できます。 メモ: SQL 文のタイプは、クライアント UI の embeddedServiceRequest 内で指定することもできます。 |
statementHandlerDefinitions | 定義された文ハンドラを示します。このハンドラは、任意の SQL 文で文を実行した際のデータ結果を変換するために使用できます。 |
接続の定義
接続は次のように定義できます。
接続 | 説明 |
connectionDefinitions | クライアント アプリケーションが外部データへの SQL データ サービス リクエストを実行できるように接続を定義します。 |
dataSourceConnectionDefinition | クライアントが接続を取得できる J2EE データ ソースを定義します。J2EE データソースを使用すると、アプリケーションが JDBC オプションパッケージjavax.sqlを通じて使用可能なネイティブ ドライバの接続プールを利用できるようになります。 |
connectionDefinitions
connectionDefinitionタグには次の属性および子要素が含まれています。
要素 | タイプ | 説明 |
driver | 属性 | この接続で使用する driver クラスを指定します。 |
id | 属性 | この接続を識別するための ID を指定します。 |
url | 属性 | この接続でアクセスするデータベースへの URL。jdbc:subprotocol:subname の形式で指定されます。 |
properties | 子要素 | この接続のプロパティのリストを指定します。 子要素: プロパティ - そのプロパティについてプロパティの名前と値を指定します。 |
例:
<connectionDefinition id="engineering" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://dgnc/engineering"> <properties> <property name="user">Ron</property> <property name="password">77$Lo</property> </properties> </connectionDefinition>
dataSourceConnectionDefinitions
dataSourceConnectionDefinition タグには次の属性が含まれています。
要素 | タイプ | 説明 |
id | 属性 | この接続を識別するための ID を指定します。 |
name | 属性 | |
password | 属性 | このデータ ソースとの接続を確立するために必要なパスワード。 |
username | 属性 | このデータ ソースとの接続を確立するために必要なユーザー名。 |
例:
<dataSourceconnectionDefinition id="support" name="java:comp/env/jdbc/SalesDB" password="P3aCh" username="BLame"> </connectionDefinition>
statementHandlerDefinitions の定義
文ハンドラを定義すると、文を実行した後の SQL 文の結果を処理できます。
文ハンドラは、statementHandlerDefinitionsセクションで statementHandlerDefinition タグを使用して定義します。
statementHandlerDefinition タグには次の属性が含まれています。
要素 | タイプ | 説明 |
class | 属性 | 実装クラスを指定します。 |
default | 属性 | 文 にその他の statementHandlerDefinitions が含まれていない場合、すべての SQL 文でこの statementHandlerDefinition をデフォルトとして使用するかどうかを指定します。true または false。True = この statementHandlerDefinition をデフォルトとして使用します。 |
id | 属性 | この statementHandlerDefinition を識別するための一意の ID を指定します。 |
例:
<statementHandlerDefinitions> <statementHandlerDefinition class="statementHandler" default="false" id="NoItalics"> </statementHandlerDefinition> <statementHandlerDefinition class="statementHandler" default="true" id="LowCase"> </statementHandlerDefinition> </statementHandlerDefinitions>
statementDefinitions の定義
SQL 文を nexaweb-sql. xmlコンフィギュレーションファイルで定義すると、サーバー上でこれらを利用できるようになります。さらに、これらの SQL 文は nexaweb-data.xmlファイルで定義された dataRequestDefinitions で参照できます。
statementDefinitions は、nexaweb-sql.xmlコンフィギュレーションファイルの statementDefinitions セクションで作成します。
SQL データサービスには、次のタイプの SQL 文が用意されています。
タグ | 説明 |
<sqlStatement> | 指定した接続に対して実行する文字列が含まれる、汎用の SQL 文を指定します。 |
<sqlSelect> | 指定した接続を通じて 1 つのテーブルにクエリを実行するための単純なシンタックスを指定します。 |
<sqlUpdate> | 指定した接続を通じて 1 つのテーブルに更新を実行するための単純なシンタックスを指定します。 |
<sqlInsert> | 指定した接続を通じて 1 つのテーブルに行を挿入するための単純なシンタックスを指定します。 |
<sqlDelete> | 指定した接続を通じて 1 つのテーブルから行を削除するための単純なシンタックスを指定します。 |
statementDefinition には次の要素が含まれています。
要素 | タイプ | 説明 | 文タイプ | 必須/省略可能 |
<connectionId> | 属性 | 文の実行に使用される connectionDefinition の ID。 | すべて | 必須 |
<id> | 属性 | この statementDefinition を識別するための ID を指定します。 | すべて | 必須 |
<statementHandlerId> | 属性 | 正常に実行された後の文を処理するために使用される statementHandler の ID。指定されていない場合、データ サービスはデフォルトの文ハンドラを使用します。 | すべて | 省略可能 |
<statement> | 属性 | 実行する文。 | <sqlStatement> | 必須 |
<table> | 子要素 | 文が行を取得または更新するテーブルを指定します。 | <sqlSelect>、<sqlUpdate>、<sqlInsert>、<sqlDelete> | 省略可能 |
<columns> | 子要素 | 取得または更新する列を指定します。指定されていない場合は、すべての列が取得または更新されます。 | <sqlSelect>、<sqlUpdate>、<sqlInsert> | 省略可能 |
<where> | 子要素 | 取得または更新される行を特定する句。 | <sqlSelect>、<sqlUpdate>、<sqlDelete> | 省略可能 |
serviceRequest の SQL データソースを使用する
データリクエストで使用するため、次の方法で SQL ステートメントを特定することができます :
位置 | 説明 |
nexaweb-sql.xml | サーバー側の nexaweb-sql.xml 設定ファイルのstatementDefinitions セクションでステートメントを特定する。その後 nexaweb-data.xml ファイルの dataRequestDefinition のserviceResourceReference で参照する。(最終的に、クライアント UIファイルの serviceRequest の dataRequestDefinitionを参照) |
nexaweb-data.xml | nexaweb-data.xml ファイルの dataRequestDefinition のserviceResourceDefintion のステートメントを特定する。(その後クライアントUIファイルの serviceRequest の dataRequestDefinition を参照) |
Client UI | embeddedServiceRequest のステートメントをクライアント UI ファイルに直接指定する |
クライアントサイドのデータリクエストPlug-in 例
次の例は UI ファイルで SQL ステートメントを定義することができる2つの方法を示しています。
例
<dr:dataRequest id=”getDepartmentRequest” target=”dataSource://myDocumentSource” xmlns:dr=”http://nexaweb/com/dataService/request”> <ds:dataRequestDefinition xmlns:ds=”http://nexaweb/com/dataService”> <ds:dataServiceRequest> <jdbc:jdbcStatement connectionId="engineering" xmlns:jdbc=”http://nexaweb/com/dataService/jdbc”> <jdbc:statement> SELECT * FROM department where dept={0} </jdbc:statement> </ jdbc:jdbcStatement> </ds:dataServiceRequest> </ds:dataRequestDefinition> </dr:dataRequest>
Shortcut Example
The following example of defining an SQL statement in a cient UI file is equivalent to the preceding In-line example.
<jdbc:jdbcStatement id=”getDepartmentRequest” connectionId="engineering" target=”dataSource://myDocumentSource” xmlns:jdbc=”http://nexaweb/com/dataService/jdbc”> <statement>SELECT * FROM department where dept={0}</statement> </jdbc:jdbcStatement> <jdbcService xmlns=http://nexaweb.com/dataService/sql> <connectionDefinitions> <connectionDefinition id="engineering" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://dgnco/engineering"> <properties> <property name="user">venutian</property> <property name="password">venutian</property> </properties> </connectionDefinition> <connectionDefinition id="salesdata" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://dgnco/sales?user=venutian&password=venutian"/> </connectionDefinitions> <statementHandlerDefinitions> </statementHandlerDefinitions> <statementDefinitions> <sqlStatement id="getCustomers" connectionId="salesdata"> <statement>select * from customers</statement> </jdbcStatement> </statementDefinitions> </jdbcService>