3.3.1概要
- このサンプルの目的
このアプリケーション作成例を通して、以下について知ることができます。
- パラメータを使用したSQL文を発行する方法
- INSERT、UPDATE、DELETEのSQL文を発行する方法
- サンプルアプリケーションの内容
パラメータを使用した複数のSQL文を発行し、取得結果を標準出力へ表示するバッチアプリケーションです。
サンプルアプリケーションの概要を下図に示します。
パラメータを使用したSQL文を発行するには、DBアクセス設定ファイルのSQL文にパラメータ名を定義します。 また、サービスからDBアクセッサを利用するときに、SQL文のパラメータ名とその値をSQLパラメータとして渡します。
INSERT、UPDATE、DELETEのSQL文を発行するには、「3.2DBアクセス - その1」のSELECTの時と同様に DBアクセス設定ファイルにSQL文を記述し、DBアクセッサを利用します。
このサンプルでは以下のファイルについて説明します。- DMLSample.java
サービスのプログラムです。上図内の赤枠の部分に相当します。 - dbaccessConfig.xml
SQL文の設定ファイルです。このファイルに発行するSQL文を記述します。上図内のDBアクセス設定ファイルに相当します。 - applicationContext.xml
CB3がserviceContext.xmlなどのspringフレームワーク関連の設定ファイルを読み込むための起点となる コンテキストファイルです。
このファイルは内容が「3.2DBアクセス - その1」と同じため省略します。 - serviceContext.xml
実行対象のサービスを定義します。 - 起動用バッチファイル - dmlsample.bat
サービスを起動するためのバッチファイルです。
- DMLSample.java
3.3.2サービスの作成
- DMLSample .java
01: public class DMLSample extends CB3Service { 02: 02: /** 03: *パラメータを使用し、DML文を発行する。 04: */ 05: @Override 06: protected int doService(ServiceParameters serviceparameters, 07: RuntimeParameters runtimeparameters) throws ServiceException { 08: 09: System.out.println(System.getProperty("line.separator")+"DMLサンプル実行"); 10: DBAccessor ac = (DBAccessor)getDataAccessContext().lookup("dbaccessConfig"); 11: 12: //不要行削除 13: ac.delete("delete"); 14: 15: //DB初期状態を確認 16: showRecord(ac.select("select1"),"select実行\n"); 17: 18: //insertを実行。パラメータを使用。 19: DBQueryParameterMap insertParam = new DBQueryParameterMap(); 20: insertParam.put("ID", "1"); 21: insertParam.put("VALUE","insertTest"); 22: ac.insert("insert1",insertParam); 23: showRecord(ac.select("select1"),"insert実行"); 24: 25: //updateを実行。パラメータを使用。 26: DBQueryParameterMap updateParam = new DBQueryParameterMap(); 27: updateParam.put("ID", "1"); 28: updateParam.put("VALUE","updateTest"); 29: ac.update("update1",updateParam); 30: showRecord(ac.select("select1"),"update実行"); 31: 32: //deleteを実行 33: ac.delete("delete"); 34: showRecord(ac.select("select1"),"delete実行"); 35: return ExitCodeConstant.SUCCESS; 36: } 36: ・・・・・・以下、省略
19行目〜23行目:
パラメータを使用したINSERT文を発行しています。INSERT文のキー(22行目の"insert1")に対応したINSERT文は以下のように定義されており、
<insert id="insert1"> INSERT INTO tutorial_table VALUES (:ID,:VALUE) </insert>
「〜 VALUES (:ID,:VALUE)」部分の「:ID」と「:VALUE」がパラメータとして指定できる部分になります。20行目、21行目で CB3が提供するDBQueryParameterMapのオブジェクトに「:ID」と「:VALUE」の値を設定しています。そしてinsert()メソッドにINSERT文のキーとパラメータ を指定してinsert文を発行しています。26行目から29行目のUPDATE処理についても実装方法は同じです。
3.3.3設定ファイルの作成
- dbaccessConfig.xml
DBアクセス設定ファイルです。サービスで使用するSQL文を定義します。
01:<?xml version="1.0" encoding="UTF-8"?> 02: <!-- 途中省略 --> 03: <!--select Sql --> 04: <select id="select1" > 05: SELECT * FROM tutorial_table 06: </select> 07: 08: <insert id="insert1"> 09: INSERT INTO tutorial_table VALUES (:ID,:VALUE) 10: </insert> 11: 12: <update id="update1"> 13: UPDATE tutorial_table SET value = :VALUE WHERE id = :ID 14: </update> 15: 16: <delete id="delete"> 17: DELETE FROM tutorial_table 18: </delete> 19: 20:</db-accessor>
このサンプルでは、複数のSQL文の定義と、INSERT文、UPDATE文においてパラメータの設定を行っています。 SELECT文、INSERT文、UPDATE文、DELETE文にはそれぞれに対応したタグを使用し、それぞれのタグが一意になるようidを指定します。
9行目、13行目:
パラメータを使用するには、「:VALUE」や「:ID」のように「:」を付けた文字列を指定します。 - serviceContext.xml
このサンプルの実行に必要となるサービスのコンテキストファイルです。
01:<?xml version="1.0" encoding="UTF-8"?> 02: <-- 途中省略 --> 03: <!-- ServiceProvider --> 04: <bean id="dmlsample" class="jp.co.cybec.cb3.container.provider.ServiceProviderImpl"> 05: <property name="service"><ref bean="sample3"/></property> 06: </bean> 07: <!-- Service --> 08: <bean id="sample3" class="jp.co.cybec.cb3.sample.database.dmlsample.DMLSample"> 09: <property name="dataAccessContext"><ref bean="accessContext"/></property> 10: </bean> 11: <!-- DataAccessContext --> 12: <bean id="accessContext" class="jp.co.cybec.cb3.accessor.DataAccessContextImpl"> 13: <constructor-arg index="0"><ref bean="testDataAccessors"/></constructor-arg> 14: </bean> 15: <util:map id="testDataAccessors"> 16: <entry key="dbaccessConfig"><ref bean="dbAccessor"/></entry> 17: </util:map> 18:</beans>
3行目〜10行目:
サービスの定義部分です。
11行目〜17行目:
「3.2DBアクセス - その1」で紹介したserviceContext.xmlの内容と同じです。
3.3.4サービスの実行
- dbaccess.bat
01:@echo off 02: 03:setlocal 04: 05:call ./set_classpath_com.bat 06: 07:set CLASSPATH=%CB3_HOME%/resources/config/dmlsample;%CLASSPATH% 08: 09:java jp.co.cybec.cb3.container.provider.ServiceProviderImpl -ServiceName dmlsample 10: 11:pause
上記バッチファイルを実行すると下記のように表示されます。
DMLサンプル実行 select実行 insert実行 1 insertTest update実行 1 updateTest delete実行 続行するには何かキーを押してください . . .