XPLATFORMプログラムで使うServer Side Serviceを作成してみましょう。
XPLATFORMプログラムでは、画面(Form)から入力しされたデータをサーバーに送る時に、 “Transaction”関数が使われます。 該当“Transaction”関数は、入力された変数とDatasetを XML Formatに加工し、呼び出したJSPに伝えます。 呼び出したJSPの結果は、 “Transaction” 呼び出しの時に登録したコールバック関数から、ErrorCode、ErrorMsg 引数ともに確認可能です。
Server Sideに作成されるサービスは、JSP、Java Servlet、ASP、ASP.NET、PHP などの言語を使うことができます。 この例題では、画面(Form)から入力されたデータをJSPを使って Database(MySql)にアクセスして保存します。 作成されたサービスは、ウェブブラウザでは、入力値をDataSet形式で伝達することができません。従って XPLATFORM画面を通してこそテストができます。
実習目的
XPLATFORM画面(Form)から入力されたデータを、“Transaction”関数を通じて受け取り、データベースに保存するJSPを作ります。
ワークブックで使われるプログラムから保存機能を実現する時に呼び出されるサービスを実現します。XPLATFORMプログラムから送信されたXML Format Dataをデータベースに保存するためにXPLATFORMから提供されるXPLATFORM XAPI(Java 用ライブラリ)を使用します。
作成後に XPLATFORMプログラムを使ってテストします。
準備事項
サーバー側、Database(MySql)、WAS(Tomcat)、XPLATFORM XAPI、JSP 作成ツール
事前学習
UX-Studio 使い方 -> UX-Studio 機能説明書
実装機能
次の段階によって XPLATFORM基本オブジェクトを作り、XML データをデータベースに保存します。
参照事項
本例題のJSPに送信されるXML Format Dataは、XPLATFORMライブラリ(XPLATFORM XAPI)ではない他のパーサー(Parser)を利用して、解析することもできます。しかし、XPLATFORM XAPIの専用オブジェクトを利用すれば、不用意に解析コードを実装する必要がないので、プログラムをより容易に作成することができます。
XPLATFORMで使われるXML Dataは、この例題と違う方法で作っても、XML規則さえ守っていれば、どんな言語でも、どんなサーバーでも、ご利用になれます。
一般的に使われるサーバー構成の例
サービス作成言語 : Java 系列(Java Servlet、JSP)、ASP 系列(ASP、ASP.NET)
ウェブサーバー : Apache、WASに含まれているウェブサーバー
データベース(Database) : Oracle、MS SQLServer、Sybase、DB2
WAS(Web Application Server) : WebLogic、WebSphere、JEUS、Tomcat、Resin
往々にしてデータベース(Database)の接続モジュールが必要です。 サービスを作成する時は、USXtudioを使わずに、一般ウェブエディター(eclipse、Visual Studio .NET、NotePad、…)を使います。 この例題は、JSPを使ってTomcatでの実行できるように実装されました。
照会サービス
構造
<!-- 3.XPlatform XAPI(ライブラリ) 宣言 -->
<!-- 2. Java ライブラリを宣言-->
<!-- 1. 基本JSP作成 -->
<%
/** 4. XPlatform 基本オブジェクト(PlatformData)生成 **/
/** 7-1. ErrorCode,ErrorMsg 処理 **/
try {
/** 5-1. Database Connection **/
try {
/** 5-2. SQL文の作成 **/
/** SELECT処理 **/
/** 6. Dataset 生成とDataをDatasetに保存 **/
/** 7-2. ErrorCode,ErrorMsg 処理 **/
} catch (SQLException e) {
/** 7-3. ErrorCode,ErrorMsg 処理 **/
}
/** 5-3. Database Close**/
} catch (Throwable th) {
/** 8-4. ErrorCode,ErrorMsg 処理 **/
}
/** 8-5. ErrorCode,ErrorMsg 処理 **/
/** 9. XML output オブジェクト(PlatformResponse) 生成 **/
%>全体コード (search.jsp)
<!-- 3.XPlatform XAPI(ライブラリ) 宣言 -->
<%@ page import="com.tobesoft.xplatform.data.*" %>
<%@ page import="com.tobesoft.xplatform.tx.*" %>
<!-- 2. Java ライブラリを宣言 -->
<%@ page import="java.sql.*"%>
<!-- 1. 基本 JSP 作成 -->
<%@ page contentType="text/xml; charset=UTF-8" %>
<%!
public String rsGet(ResultSet rs,String id)throws Exception{
if(rs.getString(id) == null)return "";
else return rs.getString(id);
}
public boolean isEmpty(String str) {
if (str == null)return true;
if ("".equals(str.trim()))return true;
return false;
}
%>
<%
out.clearBuffer();
/** 4.XPLATFORM 基本オブジェクト(PlatformData)生成 **/
PlatformData pdata = new PlatformData();
/** 7-1. ErrorCode,ErrorMsg 宣言部分 **/
int nErrorCode = 0;
String strErrorMsg = "START";
/** 5-1.Database 接続 **/
try {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
String url = "JDBC:mysql://localhost:3306/demo";
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url,"demo","1234");
stmt = con.createStatement();
/** 5-2.SQL文の作成 **/
String sql = " SELECT * FROM customer " ;
if (!isEmpty(request.getParameter("keyword"))){
sql += " WHERE LCASE(name) like LCASE('%" + request.getParameter("keyword")+ "%') " ;
}
rs = stmt.executeQuery(sql);
/** 6. Dataset 生成及び DataをDatasetに保存 **/
DataSet ds = new DataSet("customers");
ds.addColumn("id",DataTypes.INT);
ds.addColumn("name",DataTypes.STRING,16);
ds.addColumn("email",DataTypes.STRING,32);
ds.addColumn("birthday",DataTypes.STRING,8);
ds.addColumn("phone",DataTypes.STRING,16);
ds.addColumn("home_addr",DataTypes.STRING,256);
ds.addColumn("company",DataTypes.STRING,32);
ds.addColumn("jobtitle",DataTypes.STRING,32);
ds.addColumn("busi_phone",DataTypes.STRING,16);
ds.addColumn("busi_addr",DataTypes.STRING,256);
int row = 0;
while(rs.next()){
row = ds.newRow();
ds.set(row,"id",rs.getInt("id"));
ds.set(row,"name",rsGet(rs,"name"));
ds.set(row,"email",rsGet(rs,"email"));
ds.set(row,"birthday",rsGet(rs,"birthday"));
ds.set(row,"phone",rsGet(rs,"phone"));
ds.set(row,"home_addr",rsGet(rs,"home_addr"));
ds.set(row,"company",rsGet(rs,"company"));
ds.set(row,"jobtitle",rsGet(rs,"jobtitle"));
ds.set(row,"busi_phone",rsGet(rs,"busi_phone"));
ds.set(row,"busi_addr",rsGet(rs,"busi_addr"));
}
pdata.addDataSet(ds);
/** 7-2. ErrorCode,ErrorMsg 処理 **/
nErrorCode = 0;
strErrorMsg = "SUCC";
} catch (SQLException e) {
/** 7-3. ErrorCode,ErrorMsg 処理 **/
nErrorCode = -1;
strErrorMsg = e.getMessage();
}
/** 5-3. Database Close**/
if(rs != null){try{rs.close();} catch(Exception e){
nErrorCode = -1; strErrorMsg = e.getMessage();}}
if(stmt != null){try{stmt.close();}catch(Exception e){
nErrorCode = -1; strErrorMsg = e.getMessage();}}
if(con != null){try{con.close();} catch(Exception e){
nErrorCode = -1; strErrorMsg = e.getMessage();}}
} catch (Throwable th) {
/** 7-4. ErrorCode,ErrorMsg 処理 **/
nErrorCode = -1;
strErrorMsg = th.getMessage();
}
/** 7-5. ErrorCode,ErrorMsg 処理 **/
VariableList varList = pdata.getVariableList();
varList.add("ErrorCode",nErrorCode);
varList.add("ErrorMsg",strErrorMsg);
/** 8. XML output オブジェクト(PlatformResponse) 生成 **/
HttpPlatformResponse res = new HttpPlatformResponse(response);
res.setData(pdata);
res.sendData();
%>コード分析
コードの前半部分です。
<!-- 1. 基本 JSP 作成 -->
<%@ page contentType="text/xml; charset=UTF-8" %>
<%!
public String rsGet(ResultSet rs,String id)throws Exception{
if(rs.getString(id) == null)return "";
else return rs.getString(id);
}
public boolean isEmpty(String str) {
if (str == null)return true;
if ("".equals(str.trim()))return true;
return false;
}
%>
<%
/** データ処理のために実装されなければならない部分 **/
%>Java ライブラリの宣言
JSP サービスを作成するために、javaの基本ライブラリを宣言します。 Javaの基本オブジェクトとウェブサーバーのログ管理のために宣言されなければならないライブラリは、次の通りです。
<!-- 2. Java ライブラリの宣言 --> <%@ page import = "java.sql.*" %> <%@ page import="org.apache.commons.logging.*" %>
XPLATFORM XAPI(ライブラリ) 宣言
XML Dataを生成する時は、XPLATFORMが使うFormatを遵守しなければなりません。 XML Format Dataに関しては、“xerces”のようなパーサー(Parser)をご利用になったり、直接開発しても構いません。 しかし、XPLATFORM Java用ライブラリ(XPLATFORM XAPI)をご利用の場合、XPLATFORM 専用オブジェクトを作って用いるので、 XML Data Formatを特に解析せずともオブジェクトの機能を利用して、手軽にデータを抽出することができます。
XPLATFORM XAPIを宣言するスクリプトは次の通りです。
<!-- 3.XPLATFORM XAPI(ライブラリ) 宣言 --> <%@ page import="com.tobesoft.xplatform.data.*" %> <%@ page import="com.tobesoft.xplatform.tx.*" %>
XPLATFORM基本オブジェクト(PlatformData)の生成
データを処理するための基本オブジェクトを宣言します。 XPLATFORMプログラムから受け取ったXMLデータをパーシングし、Dataset形式で、 PlatformDataに保管されます。 XML Dataは、一度にいくつかのDatasetを受け取ることができます。 データベースからSQL文を実行して得た結果は、Datasetに保管されます。 Datasetはいくつかを宣言して作ることができ、一回の通信でいくつかのDatasetを作って一度で受け取ることもできます。 引数や返値に使われる変数も VariableListに保管されます。 この時作成されたDatasetとVariableListは、PlatformDataオブジェクトの中に含まれます。 したがって、変数(VariableList)やDatasetを使うのであれば、PlatformDataの宣言が必ず必要です。
PlatformDataを宣言するスクリプトは次の通りです。
out.clearBuffer(); /** 4.XPLATFORM 基本オブジェクト(PlatformData)の生成 **/ PlatformData pdata = new PlatformData();
Database接続 & SQL実行構文の作成
Database接続
作業のためにデータベースに接続して、各データに適切なSQL文を実行します。
データベースに接続する方法は、データベースの種類や実現言語によって様々です。
この例題では JSP(Java Server Page)を作成しながらMySqlを接続しました。
接続にはJDBC(Java Database Connectivity)を用いてデータベースに接続します。
データベースへの接続は5-1、ご使用の終了時に安全に連結を接続するためのスクリプトは5-3と同じです。
SQL 文の作成
照会しようとするデータはデータベースに入っています。 データベースに接続してSQL文を実行してデータを抽出します。 JSP呼び出しの時に与えられた引数( keyword )を利用して条件部分を追加します。 SQL 文を具現化する文法は、接続するデータベースによって少し差があります。SQL実行結果は ResultSet(Java Object)である“rs”に臨時保存されます。SQL基本文と条件文を実現するスクリプトは 5-2と同じです。
/** 5-1.Database Connection **/
/******* JDBC Connection *******/
try {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
String url = "JDBC:mysql://localhost:3306/demo";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,"demo","1234");
stmt = conn.createStatement();
/** 5-2.SQL 実行構文の作成 **/
String sql = " SELECT * FROM customer " ;
// 照会条件がある場合
if (!isEmpty(request.getParameter("keyword"))){
sql += " WHERE LCASE(name) like LCASE('%" + request.getParameter("keyword")+ "%') " ;
}
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
}
/** 5-3. Database Close**/
/******** JDBC Close ********/
if(rs != null){try{rs.close();}
catch(Exception e){nErrorCode = -1; strErrorMsg = e.getMessage();}}
if(stmt != null){try{stmt.close();}
catch(Exception e){nErrorCode = -1; strErrorMsg = e.getMessage();}}
if(con != null){try{con.close();}
catch(Exception e){nErrorCode = -1; strErrorMsg = e.getMessage();}}
}catch (Throwable th) {}Dataset生成 & 照会した DataをDatasetに保存
ResultSetである “rs”に入っているデータをそのままXPLATFORMに送信してもデータとして認識できません。XPLATFORMが認識できるXML Formatに加工して送る必要があります。 この過程は少々手が掛かりえるので、XPLATFORMライブラリが提供する専用オブジェクトであるDataSetを利用します。DataSetは、母体であるPlatformDataに含まれ、PlatformDataの機能を利用すれば、手軽にXML Format Dataに加工することができます。 この例題では、基本機能をご覧頂くためにResultSetの値をカラム単位ごとにDatasetへ移す過程を例示いたします。しかし、実際のプロジェクトで活用する時には、この部分を共通関数で作って活用すれば、コーディング量を減らすことができます。
ResultSet(“rs”)のデータをDataSetに入れ替えるためのスクリプトは次の通りです。
/** 6. Dataset生成 & 照会したDataをDatasetに保存 **/
/********* Dataset生成 **********/
DataSet ds = new DataSet("customers");
ds.addColumn("id",DataTypes.INT);
ds.addColumn("name",DataTypes.STRING,16);
ds.addColumn("email",DataTypes.STRING,32);
ds.addColumn("birthday",DataTypes.STRING,8);
ds.addColumn("phone",DataTypes.STRING,16);
ds.addColumn("home_addr",DataTypes.STRING,32);
ds.addColumn("company",DataTypes.STRING,32);
ds.addColumn("jobtitle",DataTypes.STRING,32);
ds.addColumn("busi_phone",DataTypes.STRING,16);
ds.addColumn("busi_addr",DataTypes.STRING,256);
int row = 0;
while(rs.next()){
row = ds.newRow();
ds.set(row,"id",rs.getInt("id"));
ds.set(row,"name",rsGet(rs,"name"));
ds.set(row,"email",rsGet(rs,"email"));
ds.set(row,"birthday",rsGet(rs,"birthday"));
ds.set(row,"phone",rsGet(rs,"phone"));
ds.set(row,"home_addr",rsGet(rs,"home_addr"));
ds.set(row,"company",rsGet(rs,"company"));
ds.set(row,"jobtitle",rsGet(rs,"jobtitle"));
ds.set(row,"busi_phone",rsGet(rs,"busi_phone"));
ds.set(row,"busi_addr",rsGet(rs,"busi_addr"));
}
// DataSetをPlatformDataに追加
pdata.addDataSet(ds);Errorcode,ErrorMsg の処理
上の過程で基本的なデータの処理が実装されました。 しかし、すべての場合に例外状況が発生することがあるので、エラーが発生した時処理する部分は、次のようにスクリプトで処理するのが望ましいです。
/** 7-1. ErrorCode,ErrorMsg 宣言部分 **/
int nErrorCode = 0;
String strErrorMsg = "START";
/** 7-2. ErrorCode,ErrorMsg の処理 **/
// 処理が成功した場合
nErrorCode = 0;
strErrorMsg = "SUCC";
/** 7-3. ErrorCode,ErrorMsg の処理 **/
// 処理が失敗した場合
nErrorCode = -1;
strErrorMsg = e.getMessage();
/** 7-4. ErrorCode,ErrorMsg の処理 **/
// 処理が失敗した場合
nErrorCode = -1;
strErrorMsg = th.getMessage();
/** 7-5. ErrorCode,ErrorMsg の処理 **/
//VariableList 参照
VariableList varList = pdata.getVariableList();
// VariableListに値を直接追加
varList.add("ErrorCode",nErrorCode);
varList.add("ErrorMsg",strErrorMsg);XML output オブジェクト(PlatformResponse)作成
先の過程を通じてデータをデータベースから抽出し、Datasetに入れます。 エラーメッセージもVariableListに登録しました。DataSetとVariableListはPlatformDataのメンバーなので、JSPの実行結果値はPlatformDataオブジェクトに入っています。 以下では、PlatformDataのデータをXPLATFORMが認識できるXML Formatに抽出し、転送する部分を例示いたします。
データを転送する機能を簡単に示すために、XPLATFORMライブラリのPlatformResponse オブジェクトを作成し、PlatformDataからデータを出力させます。そのスクリプトは、次の通りです。
/** 8. XML output オブジェクト(PlatformResponse) 作成 **/ // HttpServletResponseを利用してHttpPlatformResponse生成 HttpPlatformResponse res = new HttpPlatformResponse(response); res.setData(pdata); // データ送信 res.sendData();
保存サービス
全体コード (save.jsp)
<!-- 3.XPLATFORM XAPI(ライブラリ) 宣言 -->
<%@ page import="com.tobesoft.xplatform.data.*" %>
<%@ page import="com.tobesoft.xplatform.tx.*" %>
<!-- 2. Java ライブラリを 宣言 -->
<%@ page import="java.sql.*"%>
<!-- 1. 基本JSP作成 -->
<%@ page contentType="text/xml; charset=UTF-8" %>
<%!
public String nvl(String id)throws Exception{
if(id == null )return "";
else return id;
}
public boolean isEmpty(String str) {
if (str == null)return true;
if ("".equals(str.trim()))return true;
return false;
}
%>
<%
out.clearBuffer();
/** PlatformRequest作成& Data 読み **/
/** HttpServletRequestを利用してHttpPlatformRequest生成 */
HttpPlatformRequest req = new HttpPlatformRequest(request);
/** XML データ分析 */
req.receiveData();
/** データをPlatformData形式に保存 */
PlatformData i_xpData = req.getData();
/** PlatformDataから Dataset抽出 */
DataSet inDs = i_xpData.getDataSet("customers");
/** XPLATFORM 基本オブジェクト(PlatformData)生成 **/
PlatformData pdata = new PlatformData();
/** ErrorCode,ErrorMsg 宣言部分 **/
int nErrorCode = 0;
String strErrorMsg = "START";
/** Database接続 **/
try {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
String url = "JDBC:mysql://localhost:3306/demo";
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url,"demo","1234");
stmt = con.createStatement();
/** SQL 実行構文の作成 **/
String sql = "";
/** トランザクション管理 */
con.setAutoCommit(false);
int rowType=0;
int i=0;
/** Datasetを INSERT,UPDATE処理 **/
for ( i=0 ; i <inDs.getRowCount() ;i++){
rowType = inDs.getRowType(i);
if( rowType == DataSet.ROW_TYPE_INSERTED ){
sql = " INSERT INTO customer "
+ " (name,email,birthday,phone,home_addr"
+ " , company,jobtitle,busi_phone,busi_addr ) "
+ " VALUES ( ' "
+ nvl(inDs.getString(i,"name")) + "' ,'"
+ nvl(inDs.getString(i,"email")) + "' ,'"
+ nvl(inDs.getString(i,"birthday")) + "' ,'"
+ nvl(inDs.getString(i,"phone")) + "' ,'"
+ nvl(inDs.getString(i,"home_addr")) + "' ,'"
+ nvl(inDs.getString(i,"company")) + "' ,'"
+ nvl(inDs.getString(i,"jobtitle")) + "' ,'"
+ nvl(inDs.getString(i,"busi_phone")) + "' ,'"
+ nvl(inDs.getString(i,"busi_addr")) + "' ) " ;
stmt.executeUpdate(sql);
}else if( rowType == DataSet.ROW_TYPE_UPDATED ){
sql = " UPDATE customer SET "
+ " name = ' " + nvl(inDs.getString(i,"name")) + "' ,"
+ " email = ' " + nvl(inDs.getString(i,"email")) + "' ,"
+ " birthday = ' " + nvl(inDs.getString(i,"birthday")) + "' ,"
+ " phone = ' " + nvl(inDs.getString(i,"phone")) + "' ,"
+ " home_addr = ' " + nvl(inDs.getString(i,"home_addr")) + "' ,"
+ " company = ' " + nvl(inDs.getString(i,"company")) + "' ,"
+ " jobtitle = ' " + nvl(inDs.getString(i,"jobtitle")) + "' ,"
+ " busi_phone = ' " + nvl(inDs.getString(i,"busi_phone")) + "' ,"
+ " busi_addr = ' " + nvl(inDs.getString(i,"busi_addr")) + "' "
+ " WHERE id = " + inDs.getInt(i,"id") ;
stmt.executeUpdate(sql);
}
}
/** Datasetを DELETE 処理 **/
for( i = 0 ; i< inDs.getRemovedRowCount() ; i++ ){
sql = " DELETE FROM customer WHERE id = " + Integer.parseInt(inDs.getRemovedData(i,"id").toString()) ;
stmt.executeUpdate(sql);
}
/** トランザクション管理 */
con.commit();
/** 7-2. ErrorCode,ErrorMsg の処理 **/
nErrorCode = 1;
strErrorMsg = "SUCC";
} catch (SQLException e) {
/** 7-3. ErrorCode,ErrorMsg の処理 **/
nErrorCode = -1;
strErrorMsg = e.getMessage();
}
/** 5-3. Database Close**/
if(rs != null){try{rs.close();} catch(Exception e){
nErrorCode = -1; strErrorMsg = e.getMessage();}}
if(stmt != null){try{stmt.close();}catch(Exception e){
nErrorCode = -1; strErrorMsg = e.getMessage();}}
if(con != null){try{con.close();} catch(Exception e){
nErrorCode = -1; strErrorMsg = e.getMessage();}}
} catch (Throwable th) {
/** 7-4. ErrorCode,ErrorMsg の処理 **/
nErrorCode = -1;
strErrorMsg = th.getMessage();
}
/** 7-5. ErrorCode,ErrorMsg の処理 **/
VariableList varList = pdata.getVariableList();
varList.add("ErrorCode",nErrorCode);
varList.add("ErrorMsg",strErrorMsg);
/** 8. XML output オブジェクト(PlatformResponse)作り **/
HttpPlatformResponse res = new HttpPlatformResponse(response);
res.setData(pdata);
res.sendData();
%>コード分析
コードの前項部分です。
<!-- 1. 基本JSP作成 -->
<%@ page contentType="text/xml; charset=UTF-8" %>
<%!
public String nvl(String id)throws Exception{
if(id == null )return "";
else return id;
}
public boolean isEmpty(String str) {
if (str == null)return true;
if ("".equals(str.trim()))return true;
return false;
}%>
<%
/** データ処理のため実装しなければならない部分 **/
%>Java ライブラリ宣言
“Java ライブラリの宣言”の内容と同じです。
XPLATFORM XAPI(ライブラリ) 宣言
“XPLATFORM XAPI(ライブラリ) 宣言”の内容と同じです。
XPLATFORM 基本オブジェクト(PlatformData) 生成
“XPLATFORM基本オブジェクト(PlatformData)の生成”内容と同じです。
XML inputオブジェクト(PlatformRequest)作成 & Data読み取り
XPLATFORMプログラムから受け取ったデータはXML Formatデータです。 これを直接パーシングして使うこともできます。 ただし、XPLATFORMライブラリを利用すれば、簡単に実装することができます。
PlatformRequestオブジェクトを生成するスクリプトは、次の通りです。
/** 5.PlatformRequest 作り & Data 読み **/
// HttpServletRequestを利用して HttpPlatformRequest生成
HttpPlatformRequest req = new HttpPlatformRequest(request);
// XML データ分析
req.receiveData();
// データをPlatformData形態に保存
PlatformData i_xpData = req.getData();
// PlatformDataからDataset抽出
DataSet inDs = i_xpData.getDataSet("customers");
%>Database接続 & SQL実行構文の作成
Database接続
作業のためにデータベースに接続して、各データに適切なSQL文を実行します。
データベースに接続する方法は、データベースの種類や実装言語によって様々です。
この例題では、JSP(Java Server Page)を使ってMySqlに接続しました。
接続には、JDBC(Java Database Connectivity)を使ってデータベースに接続します。
データベースに接続し、使用が終わった時、正常に接続を終了するためのスクリプトは、次の通りです。
/** 6-1.Database接続 **/
try {
/******* JDBC Connection *******/
Connection conn = null;
Statement stmt = null;
try{
String url = "JDBC:mysql://localhost:3306/demo";
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url,"demo","1234");
stmt = con.createStatement();
} catch (SQLException e) {
}
/******** JDBC Close ********/
if ( stmt != null ) try { stmt.close(); } catch (Exception e) {
nErrorCode = -1; strErrorMsg = e.getMessage();}
if ( con != null ) try { con.close(); } catch (Exception e) {
nErrorCode = -1; strErrorMsg = e.getMessage();}
}catch (Throwable th) {
}SQL文の作成
保存しようとするデータは、Datasetオブジェクトに入っています。
Datasetからデータを読み込んで、一件ずつデータベースに保存します。
JSP呼び出しの時に伝えられたDatasetデータを、レコードの状態によって、適当なSQL文を実行します。レコードの状態を分析して適合するSQL文を実行するスクリプトは次の通りです。
/** 6-2. SQL文の作成 **/
String sql = "";
// トランザクション管理
con.setAutoCommit(false);
int rowType=0;
int i=0;
/** Dataset을 INSERT,UPDATE処理 **/
for ( i=0 ; i <inDs.getRowCount() ;i++){
rowType = inDs.getRowType(i);
if( rowType == DataSet.ROW_TYPE_INSERTED ){
sql = " INSERT INTO customer "
+ " (name,email,birthday,phone,home_addr"
+ " , company,jobtitle,busi_phone,busi_addr ) "
+ " VALUES ( ' "
+ nvl(inDs.getString(i,"name")) + " ' ,' "
+ nvl(inDs.getString(i,"email")) + " ' ,' "
+ nvl(inDs.getString(i,"birthday")) + " ' ,' "
+ nvl(inDs.getString(i,"phone")) + " ' ,' "
+ nvl(inDs.getString(i,"home_addr")) + " ' ,' "
+ nvl(inDs.getString(i,"company")) + " ' ,' "
+ nvl(inDs.getString(i,"jobtitle")) + " ' ,' "
+ nvl(inDs.getString(i,"busi_phone")) + " ' ,' "
+ nvl(inDs.getString(i,"busi_addr")) + " ' ) " ;
stmt.executeUpdate(sql);
}else if( rowType == DataSet.ROW_TYPE_UPDATED ){
sql = " UPDATE customer SET "
+ " name = ' " + nvl(inDs.getString(i,"name")) + " ' , "
+ " email = ' " + nvl(inDs.getString(i,"email")) + " ' , "
+ " birthday = ' " + nvl(inDs.getString(i,"birthday")) + " ' , "
+ " phone = ' " + nvl(inDs.getString(i,"phone")) + " ' , "
+" home_addr = ' " + nvl(inDs.getString(i,"home_addr")) + " ' , "
+ " company = ' " + nvl(inDs.getString(i,"company")) + " ' , "
+" jobtitle = ' " + nvl(inDs.getString(i,"jobtitle")) + " ' , "
+" busi_phone = ' " + nvl(inDs.getString(i,"busi_phone"))+ " ' , "
+" busi_addr = ' " + nvl(inDs.getString(i,"busi_addr"))+ " ' "
+ " WHERE id = " + inDs.getInt(i,"id") ;
stmt.executeUpdate(sql);
}
}
/** DatasetをDELETE処理 **/
for( i = 0 ; i< inDs.getRemovedRowCount() ; i++ ){
sql = " DELETE FROM customer WHERE id = " + Integer.parseInt(inDs.getRemovedData(i,"id").toString()) ;
stmt.executeUpdate(sql);
}
// トランザクション管理
con.commit();Errorcode,ErrorMsg の処理
"Errorcode,ErrorMsg の処理"と同じです。