J2X1-3801-08Z0(00)
2008
年
5
月
Windows/Solaris/Linux
Symfoware Server
アプリケーション開発ガイド
(JDBC
ドライバ編
)
まえがき
本書の目的
本書は、JDBC ドライバを利用して、Symfoware/RDB のデータベースにアクセスする方法について説明しています。本書の読者
本書は、JDBC ドライバを使用して、アプリケーションを開発される方に読んでいただくように書かれています。 本書を読むには、以下に示す技術および知識が必要です。・
Symfoware/RDB に関する知識・
SQL に関する知識・
オブジェクト指向のプログラミングに関する一般知識・
Java に関する一般知識・
JDBC に関する一般知識・
HTML に関する一般知識・
インターネットに関する一般知識・
Interstage Application Server に関する一般知識・
Interstage Studio に関する一般知識・
EJB に関する一般知識参照
グローバルサーバ上のデータベースを利用する場合には、“アプリケーション開発ガイド(JDBC ドライバ編)グローバル サーバ連携”を参照してください。本書の構成
本書の構成と内容は以下のとおりです。 第1章アプリケーション開発の概要 JDBC ドライバを利用したアプリケーション開発の概要について説明しています。 第2章アプリケーションの設計 JDBC ドライバを利用したアプリケーションの設計時に考慮すべき点について説明しています。 第3章アプリケーションの作成 JDBC ドライバを利用したアプリケーションの作成方法について説明しています。 第4章ルーチンを利用するアプリケーションの作成 プロシジャルーチンを利用するアプリケーションの作成方法について説明しています。 第5章アプリケーションのコンパイルおよび実行 JDBC ドライバを利用したアプリケーションのコンパイルおよび実行方法を説明しています。 付録A Java言語のサンプルプログラム JDBC ドライバを利用した Java 言語のサンプルプログラムを記載します。 付録B DriverManagerクラスからの接続 DriverManager クラスの API を使用し、データベースに接続する方法について説明しています。付録C 異常時の対処 JDBC ドライバ利用時に、異常が発生した際の対処方法について説明しています。 付録D 使用可能SQL文一覧 JDBC ドライバを使用したアプリケーションで指定可能な SQL 文について説明しています。 付録E メッセージリファレンス 各エラーメッセージに対する利用者の対処方法について説明しています。 付録F サポートAPI一覧 RDB2_TCP 接続と RDA-SV 接続でのサポートメソッドの一覧を記載します。
注意事項
本書の説明で使用している Interstage Application Server のバージョンは、V9.0 です。 平成 19 年 5 月 初版 平成 19 年 6 月 第 2 版 平成 19 年 8 月 第 3 版 平成 19 年 11 月 第 4 版 平成 19 年 12 月 第 5 版 平成 20 年 1 月 第 6 版 平成 20 年 4 月 第 7 版 平成 20 年 5 月 第 8 版
目 次
第1章アプリケーション開発の概要...1 1.1 JDBC ドライバの概要...1 1.2 利用形態...1 1.2.1 JDBC ドライバの利用形態...2 1.2.2 データベースへの接続形態...4 1.3 利用可能な機能...5 1.3.1 Symfoware Server の機能...5 1.3.2 J2EE の機能...5 1.4 JDK との組合せ...6 1.5 アプリケーション開発作業の流れ...7 第2章アプリケーションの設計...9 2.1 コネクション...9 2.1.1 コネクションの接続形態...10 2.1.2 コネクションプーリング...112.1.2.1 Interstage Application Server でのコネクションプーリング...11
2.1.2.2 JDBC ドライバでのコネクションプーリング...12 2.2 文字コード系の考慮...13 2.2.1 文字コード系の決定...13 2.2.2 文字コード系に関する留意事項...14 2.3 トランザクション...18 2.3.1 トランザクションの概要...18 2.3.2 トランザクションの有効範囲...18 2.3.3 トランザクションのアクセスモード...20 2.3.4 独立性水準...21 2.4 データ型...22 2.4.1 データ型の概要...22 2.4.2 Symfoware Server のデータ型...25
2.4.2.1 Symfoware Server の SMALLINT 型...25
2.4.2.2 Symfoware Server の INTEGER 型...26
2.4.2.3 Symfoware Server の NUMERIC 型および DECIMAL 型...27
2.4.2.4 Symfoware Server の REAL 型...28
2.4.2.5 Symfoware Server の DOUBLE 型...29
2.4.2.6 Symfoware Server の FLOAT 型...30
2.4.2.7 Symfoware Server の DATE 型...31
2.4.2.8 Symfoware Server の TIME 型...32
2.4.2.9 Symfoware Server の TIMESTAMP 型...33
2.4.2.10 Symfoware Server の CHAR 型および VARCHAR 型...35
2.4.2.11 Symfoware Server の NCHAR 型および NCHAR VARYING 型...37
2.4.2.12 Symfoware Server の BLOB 型...37
2.5 データ操作...38 2.5.1 データ検索について...38 2.5.2 データ更新について...40 2.5.3 ストアドプロシジャの実行について...40 2.5.4 NULL の扱いについて...41 2.6 省資源・高性能アプリケーション作成のために...42 2.6.1 オブジェクトの close メソッド...43 2.6.2 ステートメントキャッシュ...43 2.7 デッドロックについて...45 第3章アプリケーションの作成...47 3.1 コーディング方法...47 3.2 データベースへの接続/切断...47 3.3 データ参照...49 3.4 データ更新...51
3.5 パラメタ指定でのデータ参照...52 3.6 パラメタ指定でのデータ更新...55 3.7 BLOB データの参照...56 3.8 BLOB データの更新...59 3.9 スクロールカーソルの実行...60 3.10 エラー情報の取得...62 第4章ルーチンを利用するアプリケーションの作成...64 4.1 プロシジャルーチンを利用する場合...64 4.1.1 プロシジャルーチンとは...64 4.1.2 プロシジャルーチンを利用するアプリケーションの作成の流れ...64 4.1.3 プロシジャルーチンの定義...65 4.1.4 プロシジャルーチンの実行...67 4.1.5 プロシジャルーチンの処理結果...68 4.1.6 プロシジャルーチン利用時のトランザクション...68 第5章アプリケーションのコンパイルおよび実行...69 5.1 アプリケーションのコンパイル...69 5.2 ネーミングサービスと JDBC データソース登録ツール...69 5.2.1 ネーミングサービスの起動...70 5.2.1.1 Windows(R)サービス機能を利用したネーミングサービスの起動...70 5.2.1.2 Java コマンドを使用したネーミングサービスの起動...73 5.2.2 JDBC データソース登録ツールの起動...76 5.2.3 JDBC データソース登録ツール...77 5.2.3.1 データソース一覧画面...77 5.2.3.2 データソースの情報設定画面...79 5.2.3.3 データソースのオプション情報設定画面...81 5.2.3.4 ctuneparam オプションについて...85 5.2.4 symjddefds コマンドによる JDBC データソースの登録...104 5.2.4.1 JDBC データソース定義ファイルとは...105 5.2.4.2 接続先情報の設定...105 5.2.4.3 オプションの設定...106 5.3 アプリケーションの実行...112
5.3.1 Interstage Application Server を使用する場合の環境設定...112
5.3.2 Java アプリケーションの環境設定...118 5.3.3 Java アプレットの環境設定...120 5.3.4 symjd コマンド使用時の設定...121 5.3.5 実行方法...123 5.4 アプリケーションのデバッグ...123 5.4.1 エラーメッセージによる対処...123 5.4.2 JDBC スナップによる対処...124 5.4.2.1 JDBC スナップの採取方法...125 5.4.2.2 JDBC スナップの分析方法...128 5.5 アプリケーションのチューニング...129 付録A Java言語のサンプルプログラム...131 A.1 サンプル実行前の準備...131 A.1.1 データベースの作成...131 A.1.2 初期データの追加...132 A.1.3 JDBC データソース登録ツールの設定...132 A.2 データを参照する...133 A.3 データを更新する...134 A.4 パラメタを指定してデータを参照する...136 A.5 パラメタを指定してデータを追加する...137 A.6 スクロールカーソルを使用する...138 A.7 ストアドプロシジャを使用する...140 A.8 BLOB 型の列に対する操作を行う...142 A.9 手動コミットモードを使用する...144
A.10 独立性水準を設定する...147
A.11 Connection Manager 連携...149
A.12 Interstage Application Server を使用したアプリケーション...149
付録B DriverManagerクラスからの接続...151 B.1 URL 記述形式...151 B.2 getConnection メソッドのオプション...152 B.3 データベースとの接続/切断...154 B.4 サンプルアプリケーション...155 付録C 異常時の対処...157 付録D 使用可能SQL文一覧...160 付録E メッセージリファレンス...164 E.1 SQLSTATE エラーメッセージ...164 E.1.1 SQLSTATE エラーメッセージ(08001)...164
E.1.2 SQLSTATE エラーメッセージ(08003 ~ 0A000)...165
E.1.3 SQLSTATE エラーメッセージ(22000 ~ 2A000)...166
E.1.4 SQLSTATE エラーメッセージ(34000 ~ 42000)...168 E.1.5 SQLSTATE エラーメッセージ(HZ080 ~ HZxxx(xxx は 3 けたの数字))...170 E.1.6 SQLSTATE エラーメッセージ(S1000 ~ S1093)...171 E.2 Vendor エラーメッセージ...172 E.2.1 Vendor エラーメッセージ(0 ~ 9)...173 E.2.2 Vendor エラーメッセージ(12 ~ 99)...174 E.2.3 Vendor エラーメッセージ(100 ~ 117)...177 E.2.4 Vendor エラーメッセージ(1000 ~ 1009)...181 E.2.5 Vendor エラーメッセージ(1010 ~ 1019)...183 E.2.6 Vendor エラーメッセージ(1020 ~ 1039)...186 E.2.7 Vendor エラーメッセージ(1040 ~ 1049)...188 E.2.8 Vendor エラーメッセージ(1050 ~ 1088)...191 E.2.9 Vendor エラーメッセージ(2000 ~ 4007)...202 E.2.10 Vendor エラーメッセージ(7001 ~ 7007)...205 E.2.11 Vendor エラーメッセージ(8000 ~ 8009)...206 E.3 symjd メッセージ...209 E.3.1 symjd メッセージ(インフォメーションメッセージ)...209 E.3.2 symjd メッセージ(異常系メッセージ)...211 付録F サポートAPI一覧...223 索引...234
第
1
章
アプリケーション開発の概要
本章では、JDBC ドライバを利用したアプリケーション開発の概要について説明します。
1.1
JDBC
ドライバの概要
JDBC は、米国 Sun Microsystems,Inc.によって提唱された Java を使って SQL 文を実行し、データベース操作をするための API です。 JDBC ドライバは、クライアント上の Java アプリケーションから、サーバ上の Symfoware データベース(以降、データベー スと呼びます)にアクセスするためのインタフェースを提供します。
JDBC
ドライバのドライバタイプ
JDBC ドライバのドライバタイプは、一般に以下の 4 つのタイプに分類されます。 ドライバタイプ 概要 ODBC ブリッジ(タイプ 1) ODBC ドライバを経由して、各データベースに接 続するドライバです。 ネイティブブリッジ(タイプ 2) DBMS 固有の接続ライブラリ用 API を使用したド ライバです。Symfoware Server への高速アクセス が可能です。 ネットプロトコルドライバ(タ イプ 3) 以下の 2 つの部分から構成されるドライバです。・
ネットワーク経由でダウンロード可能な JDBC ドライバ部・
3 階層モデルの中間層のアプリケーションとし て動作するミドルウェア部 ネイティブプロトコルドライ バ(タイプ 4) JDBC API から DBMS 依存のネイティブプロトコ ルへの変換まで、すべてを単体で行うドライバで す。PureJava で構成されており、Symfoware Server では、グローバルサーバおよび PRIMEFORCE 上のデータベースと RDA 接続す る場合、または Java アプレットを使用する場合に 使用してください。 Symfoware Server の JDBC ドライバでは、ネイティブブリッジ(タイプ 2)とネイティブプロトコルドライバ(タイプ 4)をサポー トしています。1.2
利用形態
JDBC ドライバの利用形態について説明します。1.2.1
JDBC
ドライバの利用形態
JDBC ドライバを使用したアプリケーションには、以下の種類があります。 アプリケーションの種類 説明 アプリケーションサー バ上で運用する場 合 EJB EJB サービスを使用したアプリケー ション Servlet JSP Web サーバ上で実行され、Web ブラウザをクライアントとして使用す るアプリケーション クライアント端末上で 運用する場合 Java アプリケーショ ン Java アプリケーションを作成し、直 接使用する形態 Java アプレット アプリケーションを Java アプレット として作成し、使用する形態EJB アプリケーションを使用する場合は、Interstage Application Server の EJB サービスを使用してください。 Servlet や JSP を使用する場合は、Interstage Application Server の Servlet サービスの使用を推奨します。
その他の Servlet コンテナを使用する場合は、各製品のドキュメントを参照してください。 JDBC ドライバの利用形態には、システム規模に応じて以下のようなモデルがあります。
・
4 階層モデル・
3 階層モデル・
2 階層モデル 4階層モデル 大/中規模システムを構築するユーザ向けの 4 階層モデルについて説明します。図
1.1 4
階層モデル
4 階層モデルでは、各層における役割分担が明確になります。通常クライアントは Web ブラウザになります。Web サーバでは、クライアントに対するビューの提供と、クライアントからの要求をアプリケーションサーバに引渡す役割を 担います。アプリケーションサーバでは、Web サーバからの要求に応じてデータベースサーバにあるリソースとのやり 取りなどの固有のビジネスロジックを実行し、その結果を Web サーバに戻します。データベースサーバには、ユーザ の資産であるデータベースが存在します。このモデルでは、JDBC ドライバはアプリケーションサーバに存在します。4 階層モデルでは、各層で個別の機能に特化した開発が行いやすく、開発効率および保守性が高くなり再利用性 の高い部品開発も容易になります。 3階層モデル 小/中規模システムを構築するユーザ向けの 3 階層モデルについて説明します。
図
1.2 3
階層モデル
(1)
“図 1.2 3 階層モデル(1)”に示したモデルは、4 階層モデルからアプリケーションサーバを除いた構成になります。こ のため中間層である Web サーバでビジネスロジックを実装する必要があり、データベースへのアクセスなど比較的単 純な要求を処理するシステムに適用されることが多くなります。クライアントは通常 Web ブラウザになります。このモデ ルでは、JDBC ドライバは Web サーバに存在します。図
1.3 3
階層モデル
(2)
“図 1.3 3 階層モデル(2)”に示したモデルは、4 階層モデルから Web サーバを除いた構成になります。クライアントの アプリケーションは通常 Java アプリケーションとなり、必要に応じて利用者へのビューを実装します。クライアントの Java アプリケーションでは複雑なビューを提供することができますが、各クライアント端末に対して Java アプリケーションの 配布が必要となります。このモデルでは、JDBC ドライバはアプリケーションサーバに存在します。2階層モデル 小規模システムを構築するユーザ向けの 2 階層モデルについて説明します。
図
1.4 2
階層モデル
2 階層モデルでは、3 階層モデルおよび 4 階層モデルにおける Web サーバとアプリケーションサーバの機能をクラ イアントで提供する必要があります。このため、2 階層モデルは、単一の機能のみを処理するようなごく小規模なシス テムで使用されます。このモデルでは、JDBC ドライバはクライアントに存在します。1.2.2
データベースへの接続形態
JDBC ドライバのデータベースへの接続形態と、JDBC ドライバが動作可能なプラットフォームについて、以下に示しま す。接続形態
JDBC ドライバからデータベースに接続するには、以下の 3 つの形態があります。 接続形態名 ドライバタイプ 説明 ローカルアク セス ネイティブ・ブリッ ジ(タイプ 2) JDBC ドライバと接続先データベースが、 同一サーバシステム上にある接続形態 です。Windows(R)、Solaris または Linux 上のデータベースに接続する場 合に使用します。 リモートアクセ ス (RDB2_TCP 連携) JDBC ドライバと接続先データベースが、 異なるサーバシステム上にある接続形態 です。Windows(R)、Solaris、Linux、また は、グローバルサーバおよび PRIMEFORCE 上のデータベースに接 続する場合に使用します。 リモートアクセ ス (RDA-SV 連 携) ネイティブプロトコ ルドライバ(タイプ 4) JDBC ドライバと接続先データベースが、 同一サーバシステム上、または異なる サーバシステムにある接続形態で、グ ローバルサーバおよび PRIMEFORCE 上のデータベースと RDA 接続する場合 または Java アプレットを使用する場合に 使用します。サポートプラットフォーム
JDBC ドライバが動作可能なプラットフォームには、以下があります。 動作プラットフォーム 接続可能プラットフォーム 接続形態 Windows Windows Solaris Linux RDB2_TCP 連 携 グローバルサーバおよび PRIMEFORCE RDB2_TCP 連 携または RDA-SV 連携 Solaris Windows Solaris Linux RDB2_TCP 連 携 グローバルサーバおよび PRIMEFORCE RDB2_TCP 連 携または RDA-SV 連携 Linux Windows Solaris Linux RDB2_TCP 連 携 グローバルサーバおよび PRIMEFORCE RDB2_TCP 連 携または RDA-SV 連携 グローバルサーバおよび PRIMEFORCE グローバルサーバおよび PRIMEFORCE RDA-SV 連携1.3
利用可能な機能
JDBC ドライバを使用することで、利用可能となる機能について説明します。1.3.1
Symfoware Server
の機能
C や COBOL で作成されたアプリケーションと同様に、JDBC ドライバを利用したアプリケーションからも SQL 文を利用し たデータ操作、トランザクション操作、ストアドプロシジャ実行などの機能を利用することができます。 JDBC ドライバを利用したアプリケーションには以下の特長があります。・
アプリケーション開発が容易にできる・
データ型に対する操作が容易にできる・
アプリケーションの移植が容易にできる 使用可能な SQL 文の詳細については、“付録 D 使用可能 SQL 文一覧”を参照してください。データ型の詳細につい ては、“2.4 データ型”を参照してください。1.3.2
J2EE
の機能
J2EE の 1 サービスである JDBC ドライバには、以下の機能があります。標準機能
(Core API)
・
データベースとの接続/切断・
データ操作(データ参照、データ更新、パラメタ指定)・
トランザクションの管理(自動/手動トランザクション、コミット/ロールバック、トランザクションモード)・
ストアドプロシジャの実行・
データベースのメタデータの取得(データベースの定義情報を取得する機能)・
例外についての情報の取得(アプリケーション実行時に発生したエラーに関する情報を取得する機能)拡張機能
(JDBC 2.0 Optional Package)
・
JDBC データソースを使用したデータベースとの接続(接続先データベースに関する情報を、アプリケーションとは別 に管理し、データベースに接続する機能)・
コネクションプーリング(データベースへのコネクションをキャッシュする機能)これらの機能を利用する場合、JNDI クラスライブラリおよび JDBC 2.0 Optional Package が必要です。なお、JDK1.4 以 降をご利用の場合は、JDK に JNDI クラスライブラリおよび JDBC 2.0 Optional Package の機能が同梱されています。
JNDI クラスライブラリおよび JDBC 2.0 Optional Package の詳細については、JNDI のホームページを参照してください。
1.4
JDK
との組合せ
JDBC ドライバが動作可能な JDK との組合せと、JDBC 規約との対応について以下に説明します。
JDK
とは
Java アプリケーションの開発環境です。
JDK
との組合せ
Interstage Application Server に同梱されている JDK との組合せを推奨します。 JDBC ドライバが動作可能な JDK との組合せを以下に示します。 JDKのVL 動作可否 JDK1.1x × JDK1.2.x × JDK1.3.x ○ JDK1.4.x ○ JDK5.0 Update x ○ 以下の実行環境の場合には、使用できる JDK のバージョンが限定されます。
・
JDBC ドライバの実行環境が、Solaris 10 の場合、以下のバージョンが使用可能です。Interstage Application Server に同梱されている JDK:
1.4.2_08 以降
・
IPv6 のネットワーク環境で運用する場合は、JDK1.4 以降が必要です。・
JDBC ドライバの実行環境が、RHEL-AS4(IPF)または RHEL5 の場合、以下のバージョンが使用可能です。RHEL-AS4(IPF) RHEL5(IPF) RHEL5(Intel64) RHEL5(x86)
Interstage Applicatio n Server に 同梱されて いる JDK 1.4.2_05 以 降 (注 1) 5.0 Update10 以降 5.0 Update 10 以降 Sun 製 JDK 1.4.2_08 以降 (注 1)(注 2) 対応版なし 5.0 Update2 以降 5.0
注 1) PRIMEQUEST 500 シリーズの場合は、以下のバージョンが使用可能です。
Interstage Application Server に同梱されている JDK:
1.4.2_08 以降
Sun 製 JDK:
1.4.2_11以降
注 2) 5.0 は対応版がありません。
・
IPv6 のネットワーク環境で運用する場合は、JDK1.4 以降が必要です。・
JDBC ドライバの実行環境が Windows Server(R) 2003 for Itanium の場合、以下のバージョンが使用可能です。Interstage Application Server に同梱されている JDK: 1.4.2、5.0 Update 13
Sun 製 JDK: 1.4.2
・
Windows Server(R) 2008 for Itanium の場合、以下のバージョンが使用可能です。Interstage Application Server に同梱されている JDK: 5.0 Update 13
・
Windows Server(R) 2003 x64 Editions の場合、以下のバージョンが使用可能です。Interstage Application Server に同梱されている JDK:
1.4.2_16、5.0 Update 13
Sun 製 JDK: 5.0 Update 2 以降
・
Windows Server(R) 2008 for x64 の場合、以下のバージョンが使用可能です。Interstage Application Server に同梱されている JDK:
5.0 Update 13
・
JDBC ドライバの実行環境が Windows Vista(R)の場合、以下のバージョンが使用可能です。Interstage Application Server に同梱されている JDK: 1.4.2_14 以降 Sun 製 JDK: 1.4.2_14 以降
・
IPv6 のネットワーク環境で運用する場合は、JDK5.0 以降が必要です。JDBC
規約との対応
JDBC 規約である JDBC1.X 規約および JDBC2.X 規約に対応したアプリケーションを動作させることができます。参照
API のサポート状況については、“Java API リファレンス”を参照してください。
1.5
アプリケーション開発作業の流れ
第
2
章
アプリケーションの設計
本章では、JDBC ドライバを利用したアプリケーションの設計時に考慮すべき点について説明します。2.1
コネクション
コネクションについて、以下に分類して説明します。・
コネクションとは・
コネクションの接続手段・
コネクションの接続・
コネクションの切断コネクションとは
コネクションとは、JDBC ドライバを使用するアプリケーションが Symfoware Server にアクセスするために結んだ接続関係 のことです。アプリケーションがデータベースシステムとコネクションをもつことにより、そのデータベースシステムの資源を 操作することができます。コネクションの接続手段
JDBC ドライバを使用するアプリケーションからデータベースに接続するためには、以下の 2 種類の手段があります。 パッケージ API 概要 javax.sql DataSource インタフェー ス アプリケーション内で JDBC データ ソースを使用して、データベースに 接続する方法 java.sql DriverManager クラス アプリケーション内で、接続先の URL を直接指定する方法 アプリケーションサーバ上で運用する場合、DataSource インタフェースの利用を推奨します。 本書では、DataSource インタフェースを利用した場合を主に説明します。 データソースの設定方法については、“5.2 ネーミングサービスと JDBC データソース登録ツール”を参照してください。 クライアント上で Java アプレットを運用する場合、DriverManager クラスを利用してください。DriverManager クラスの利用 については、“付録 B DriverManager クラスからの接続”を参照してください。コネクションの接続
JDBC ドライバを使用するアプリケーションとデータベースとのコネクションの接続は、DataSource インタフェースの getConnection メソッドで行います。また、コネクションを接続することにより、SQL 文を実行することができます。
コネクションの切断
JDBC ドライバを使用するアプリケーションと Symfoware Server とのコネクションの切断は、Connection インタフェースの close メソッドで行います。コネクションの切断は、DataSource インタフェースの getConnection メソッドで接続したコネクショ
ンに対して実行できます。また、トランザクションは終了した状態で実行します。トランザクション中にコネクションが切断さ れると、トランザクションも終了します。
プログラミングの概要
以下に、コネクションのプログラミング概要を示します。
Hashtable env = new Hashtable(); (1) env.put(Context.INITIAL_CONTEXT_FACTORY
"com.fujitsu.symfoware.jdbc2.jndisp.SYMContextFactory"); (1) env.put(Context.PROVIDER_URL,"SYM://myhost:10326"); (1) InitialContext ctx = new InitialContext(env); (1)
DataSource ds = (DataSource)ctx.lookup("jdbc/ds1"); (2) Connection con = ds.getConnection(); (3) : con.setAutoCommit(false); (4) : con.commit(); (4) con.close(); (5) (1) JNDI 環境の指定 (2) JDBC データソースの取得 (3) データベースへの接続 (4) トランザクション操作 (5) データベースへの接続の切断 各項目の詳細な設定方法については、“3.2 データベースへの接続/切断”を参照してください。
2.1.1
コネクションの接続形態
JDBC ドライバからデータベースに対してコネクションを接続する場合、以下の接続形態があります。 接続形態 説明 ローカルアクセス JDBC ドライバと接続先データベースが、同一サーバシ ステムにある接続形態です。 Windows(R)、Solaris または Linux 上のデータベースに 接続する際に使用します。 リモートアクセス (RDB2_TCP 連携) JDBC ドライバと接続先データベースが、別サーバシス テムにある接続形態です。 Windows(R)、Solaris または Linux 上のデータベースに 接続する際に使用します。 リモートアクセス (RDA-SV 連携) JDBC ドライバと接続先データベースが、同一サーバシ ステム上、または異なるサーバシステムにある接続形態 です。 グローバルサーバおよび PRIMEFORCE 上のデータ ベースに接続する際に使用します。 注) Java アプレットを使用する場合は、本接続形態を利 用してください。 また、接続先のサーバの OS ファイル(/etc/services ファイルなど)にサービス名とポート番号が定義されている必要があり ます。指定するポート番号は、通信方法によって異なります。参照
Solaris の場合 ポート番号の指定方法の詳細については、“セットアップガイド”または“RDA-SV オペレーションガイド”を参照してくださ い。 Linux/Windows の場合 ポート番号の指定方法の詳細については、“セットアップガイド”を参照してください。2.1.2
コネクションプーリング
コネクションプーリングとは、データベースに接続する場合に、要求されるたびにコネクションを作成するのではなく、コネ クションをプール(保持)して再利用する機能です。 このため、コネクションプーリングを使用することにより、同一ユーザのアプリケーションからデータベースへ接続する回数 が軽減し、データベースへのコネクションを確立するアプリケーションの負荷も軽減されます。 コネクションプーリングを使用する場合、以下の 2 種類の方式から選択できます。・
2.1.2.1 Interstage Application Server でのコネクションプーリング・
2.1.2.2 JDBC ドライバでのコネクションプーリングInterstage Application Server 9.0.0 以降と連携する場合には、Interstage Application Server でコネクションプーリングを行
う方式を推奨します。
2.1.2.1
Interstage Application Server
でのコネクションプーリング
Interstage Application Server でコネクションプーリングを行うことにより、Interstage Application Server が提供している以
下の機能が利用可能となります。
・
IJServer が提供する最大コネクション数、コネクションタイムアウトの指定・
自動再接続機能・
コネクションのモニタ情報表示-
コネクションプール情報 物理コネクション数、空きコネクション数、使用中コネクション数-
コネクション獲得待ち情報 コネクション待ち回数、コネクション待ち時間、コネクション待ちスレッド数、コネクション待ちタイムアウト回数-
物理コネクション確立情報 物理コネクション確立回数、物理コネクション確立時間、アイドルタイムアウトによるクローズ回数、例外発生によ るクローズ回数また、Interstage Application Server でコネクションプーリングを行う場合は、以下の手順が不要となります。
・
環境構築時-
JDBC ドライバのネーミングサービス起動-
JDBC ドライバのネーミングサービスにデータソース情報を登録・
運用時-
JDBC ドライバのネーミングサービス起動参照
・
Interstage Application Server のコネクションプーリングの詳細については、“Interstage Application Server J2EE ユーザーズガイド”を参照してください。
・
Interstage Application Server による JDBC データソース登録の詳細については、“Interstage 管理コンソールヘルプ”または“Interstage Application Server リファレンスマニュアル(コマンド編)”を参照してください。
注意
・
最大コネクション数で設定された値以上のコネクション要求が発生した場合、プールにコネクションが返却されるのを 待ちます。・
コネクションタイムアウト値に 0 を指定した場合、JDBC ドライバと同様に即座にエラーを返却します。2.1.2.2
JDBC
ドライバでのコネクションプーリング
コネクションプーリングについて、以下に分類して説明します。・
JDBC ドライバの動作・
データソースとプロセスの関係JDBC
ドライバの動作
JDBC ドライバのコネクションプーリング時の動作について、以下に説明します。 コネクション接続 初回接続時は、 コネクションプーリングを使用しない場合と同じように、データベースへ接続します。次回の接続要求 をした場合でも、プールしているコネクションがすべて使用中の場合には、新規にデータベースへ接続します。 また、最大コネクション数で設定された値以上のコネクション要求が発生した場合、JDBC ドライバがエラーを返却し ます。 コネクションのプール(保持)と再利用 JDBC ドライバでは、データソース接続に設定された“最大プールコネクション数”に達するまで、コネクションを保持 していきます。接続要求をした際、プールしているコネクションの中に未使用のものが存在すると、事前に接続したコ ネクションを再利用します。その後、プールしているコネクション数以上に接続要求が重なると、未使用のコネクション が存在しないため、新たに接続してコネクションの接続本数は増加(最大コネクション数まで)していきます。 コネクションの切断 コネクションプーリング中は、アプリケーションで close メソッドを実施しても、データベースとの物理的なコネクションの 切断を行いません。以下の場合に、データベースとの物理的なコネクションを切断します。-
プロセスが終了する場合には、データベースとの物理的なコネクションをすべて切断します。-
処理途中においても、同時に接続要求が重なり、最大プールコネクション数を超えるコネクションが接続された場 合には、そのクローズ要求で、データベースとの物理的なコネクションを切断します(最大プールコネクション数内 に収まるように調整します)。データソースとプロセスの関係
複数のプロセスから同一データソースを使用する場合、データソースに登録したコネクション数(最大コネクション数、最 大プールコネクション数)は Java のプロセスごとに対応します。データソース登録の詳細については、“5.2.3 JDBC デー タソース登録ツール”を参照してください。 以下の例では、データソースに最大コネクション数を 16、最大プールコネクション数を 5 として登録しています。この時、 Java アプリケーション 1、Java アプリケーション 2 それぞれ 16 まで接続が可能で、コネクションをそれぞれ 5 つプーリン グします。2.2
文字コード系の考慮
アプリケーション開発を行う場合に、文字コード系に関して考慮しなければならない点を説明します。2.2.1
文字コード系の決定
Java のアプリケーションでは、以下の文字コード系が使用できます。・
EUC コード・
シフト JIS コード・
UNICODEJava のアプリケーションは、文字データを内部的に UNICODE で扱っており、Java アプリケーションに対して文字コード系が UNICODE の入出力を行う場合、データベース格納文字コード系に UNICODE を選択することでコード変換処理が軽
減するという利点があります。
拡張漢字および拡張非漢字を流通する場合
Java のアプリケーションは、文字データを内部的に UNICODE (UCS-2)で扱っており、Java アプリケーションに対して UNICODE 以外の文字コード系の入出力を扱う場合、Java のコード変換機能(Java コンバータ)が動作します。この Java
のコード変換機能は、JIS 漢字および JIS 非漢字以外の文字コードの変換をサポートしていないので、拡張文字を流通 させる際にはすべて UNICODE で流通させることを推奨します。
UNICODE 流通するには、データベースに格納する文字コード系を UNICODE とします。また、データベースに対して RDB2_TCP 連携またはローカルで接続してください。
Solaris
マシンまたは
Linux
マシンで
MS
ベンダー文字を流通する場合
Java のアプリケーションで MS ベンダー文字を流通する場合も UNICODE での流通を推奨します。ただし、UNICODE
流通しなくても、JDBC ドライバおよび Java のエンコーディング名に MS932 を指定することで MS ベンダー文字の流通 を行うことができます。Windows(R)マシンの場合にはデフォルトで MS932 が指定されています。
Solaris マシンまたは Linux マシン上に JDBC ドライバがインストールされていて、Windows(R)マシンとの間でデータの
やりとりを行う場合には、MS932 を指定することで MS ベンダー文字を Windows(R)マシンから入出力することができま す。ただし、Solaris マシンまたは Linux マシンでは、MS ベンダー文字を標準出力することはできません。また、エンコー ディング名に MS932 を指定した Solaris マシンとエンコーディング名に SJIS を指定または省略した Solaris マシン、また はエンコーディング名に MS932 を指定した Linux マシンとエンコーディング名に SJIS を指定または省略した Linux マ シンとの間でデータのやりとりをする場合に、一部の文字(“-”や“~”など)が文字化けなどで流通できなくなります。エ ンコーディング名が混在しているシステムの場合には注意が必要となります。 なお、ベンダー依存の問題に関する詳細については、“2.2.2 文字コード系に関する留意事項”を参照してください。 UNICODE 以外の文字コード系を使用する場合には、Java アプリケーションのエンコーディング名に MS932 を設定して ください。 JDBC ドライバに対してエンコーディング名に MS932 を設定する場合は、以下のように設定してください。 記述形式: javaconverter=MS932 設定方法: JDBC データソース登録ツールの「オプション情報設定」画面で「その他パラメタ」の欄にオプションを設定してくださ い。
アプリケーション実行環境のロケールが
C
の場合
アプリケーション実行環境のロケールが C で、ASCII コード範囲外の文字データを利用する場合、javaconverter オプショ ンで対象データのエンコーディングを指定してください。javaconverter オプションの詳細は、“5.2.4.3 オプションの設定” を参照してください。2.2.2
文字コード系に関する留意事項
Java で異機種間結合を行う場合、あるいは、データベース接続を行う場合に起こる問題の 1 つに、文字化けの問題があ ります。たとえば、Solaris マシンから Windows(R)マシンにネットワークを介して全角のチルダ記号('~')を送ると、 Windows(R)マシンで表示したときに文字化けしてしまうことがあります。これは既存の日本語コード(JIS、EUC、シフト JIS)を UNICODE に変換する際の変換規則が各ベンダによって異なるた めに起きる問題です。この問題は Java で解決できるものではなく、Java のシステム開発者がこの問題を避けるための自 衛的手段を講じる必要があります。 この問題を理解するには、この問題が起きた背景を理解する必要があります。 以下ではその背景を説明します。
UNICODE
の特徴
UNICODE は UNICODE コンソーシアムが規定した文字コード体系です。世界の主要な言語のほとんどの文字を収録 し、1 つの文字コード体系で多国語処理を可能にしようという目的で策定されたものです。UNICODE は国際標準化機構 (ISO)の規格である ISO/IEC 10646 のベースになっています。 UNICODE は主要な言語のほとんどの文字を収録しようとした訳ですが、この過程で次のような特徴が生まれました。 似たような文字が多数収録されている UNICODE は、見た目が同じような文字であっても役割や用途が異なる文字は別文字として収録する、という方針で策定されています。たとえば全角のチルダ記号('~'、JIS X 0208 では WAVE DASH(01-33))に似た文字は、以下の ように 6 種類も収録されています。
表
2.1 JIS X 0208 01-33(WAVE DASH
、
'
~
')
に似た
UNICODE
文字
コードポイント 登録名
U+301c WAVE DASH U+223c TILDE OPERATOR U+223d REVERSED TILDE U+223e INVERTED LAZY S U+223f SIGN WAVE U+ff5e FULLWIDTH TILDE
全角・半角を別文字として収録している
UNICODE では、既存の文字コード系との互換性を保証するために、全角と半角を別文字として収録しています。た
とえば全角の'A'と半角の'A'は UNICODE では異なる文字として収録されています。
しかし、'£'や'¢'などのように日本語の文字コード系では全角の文字しかないものも、UNICODE では全角と半角の 2 種類の文字が収録されています。
表
2.2 JIS X 0208 01-82(POUND SIGN
、
'
£
')
に対応可能な
UNICODE
文字
コードポイント 登録名
U+00a3 POUND SIGN
U+ffe1 FULLWIDTH POUND SIGN
表
2.3 JIS X 0208 01-81(CENT SIGN
、
'
¢
')
に対応可能な
UNICODE
文字
コードポイント 登録名
U+00a2 CENT SIGN
U+ffe0 FULLWIDTH CENT SIGN
コード変換のベンダ依存性
このように UNICODE には似たような文字が多数収録されているので、既存の日本語文字コード系の文字を UNICODE のどの文字に対応させるべきか、いろいろな解釈が出てきます。ベンダごとの解釈が異なるために、実際に各ベンダの 変換規則に違いが出ています。代表的な例を以下に挙げます。
UNICODEコンソーシアムではJIS漢字とUNICODEの変換規則を提供
JIS でも JIS X 0221 の付属書で JIS 漢字と UNICODE の変換規則を定義しています。この 2 つで全角のダッシュ記号 (JIS X 0201 01-29、'*')の変換規則が異なります。
UNICODEコンソーシアムとJISの変換規則の違い
MicrosoftはWindows(R)でのシフトJISとUNICODEの相互変換規則を独自に定義
Windows(R)の変換規則では日本語コードの全角文字は UNICODE の全角文字に対応させるというのが基本方針
表
2.4 JIS
の変換規則と
Windows(R)
の変換規則の違い
JIS X 0208 UNICODEへの変換 01-33 WAVE DASH ('~') JIS:U+301c (WAVE DASH) Windows(R):U+ff5e (FULLWIDTH TILDE) 01-82 POUND SIGN ('£') JIS:U+00a3 (POUND SIGN) Windows(R):U+ffe1(FULLWIDTH POUND SIGN) 01-81
CENT SIGN ('¢')
JIS:U+00a2 (CENT SIGN) Windows(R):U+ffe0 (FULLWIDTH CENT SIGN)
これらの変換規則は、どれが正しくてどれが間違っているというものではありません。JIS で定義されている変換規則はあ くまでも参考であり、強制力を持つものではありません。どの文字をどの文字に対応させるかは、最終的には変換規則を 作成する各ベンダに任せられているのが現状です。
文字化けが起きる仕組み
このように各ベンダにより変換規則が異なるために、Java で異ベンダのシステムを連携させたときに、いくつかの文字が 文字化けすることになります。例として、Java で Solaris と Windows(R)をネットワーク接続し、テキストデータをやりとりするシステムを考えてみます。
表
2.5
変換表の不整合による文字化けの例
(
ネットワーク通信時
)
EUCデータ Solaris Java(UNICOD E) シフトJISデータ Windows '~' → U+301c → 未定義 未定義 ← U+ff5e ← '~' Java はプラットフォーム固有の文字コード系の文字データを読み込み、それを UNICODE に変換して処理します。デー タがネットワーク転送される際には UNICODE 形式で送られ、それが他方のプラットフォーム固有の文字コード系に変換 し直されます。この例では Solaris 上での文字コード系に EUC コードを用いることにします。Solaris 上の EUC コードと UNICODE の相 互変換は JIS の変換規則に従ったものです。Java も基本的には JIS の変換規則に従って EUC コードと UNICODE の 相互変換を行います。
Windows(R)の方では文字コード系にシフト JIS を用いることにします。Windows(R)には Windows(R)のコード変換規則
があるので、Java も Windows(R)の変換規則に従ってシフト JIS と UNICODE の相互変換を行います。 ここで、Solaris から Windows(R)に全角のチルダ文字('~')を送る場合を考えてみます。
1.
Java は Solaris 上で EUC コードの'~'を読み込み、UNICODE に変換します。Solaris 上では JIS の変換規則に従った変換を行うので、'~'は U+301c に変換されます。
2.
UNICODE に変換された'~'(U+301c)が Windows(R)にネットワーク転送されます。3.
送られた UNICODE データが Windows(R)上でシフト JIS に変換しなおされます。このとき Windows(R)上ではWindows(R)の変換規則に従った変換が行われます。
4.
しかし、Windows(R)の変換規則では'~'に対応する UNICODE は U+ff5e です。Solaris から送られてきたUNICODE データ(U+301c)は、Windows(R)の変換規則では対応する文字が定義されていません。このため、 Windows(R)の変換規則で U+301c を変換するとシフト JIS では未定義文字になってしまいます。
この逆も同じことで、Windows(R)上の'~'(U+ff5e)を Solaris に送った場合にも、JIS の変換規則では U+ff5e に対応する 文字が定義されていないため、EUC コードに変換したときには未定義文字になってしまいます。 Solaris 上のコード変換も Windows(R)上のコード変換も変換規則に問題はなく、Java もそれに従って正しい変換を行っ ています。しかしそれぞれの変換規則が異なるために、2 つの規則を組み合わせたときに正しい変換が行われなくなっ てしまいます。
対処方法
これらの問題は一方の変換規則をもう一方に合わせれば解決するように見えますが、そうすると今度は変換規則を変え た方で別の不整合が起こります。たとえば始めの例で、Windows(R)側の変換規則を JIS の変換規則に変えてしまうと、Solaris から送られてきた UNICODE データは正しく変換できるようになりますが、Windows(R)上に保存されている既存の UNICODE データが正しく変換で きなくなります。 最も単純かつ確実な対処方法は、文字化けが起きる文字をシステムで使わないようにすることです。文字化けが起きる 文字はごく限られた少数のマルチバイト文字のみです。システム設計時にそれらの文字を使用しないよう注意する必要 があります。 あるいは、サーバが Solaris でクライアントが Windows(R)であるといったように使用するプラットフォームやデータベース が特定できる場合には、データ転送時にフィルタを掛けるという対処法もあります。
たとえば、Solaris から Windows(R)に文字データを送信する際に、データ内に現れる U+301c をすべて U+ff5e に変換 してから転送すれば、Solaris から Windows(R)に正しく'~'が送られるようになります。
いずれにせよ、異なるベンダのシステムをつないだシステム開発を行う際には、システム開発者が事前に自衛的手段を 講じて、文字化けの問題が起きるのを防ぐ必要があります。
参考
以下は、Java で前述の例(Solaris と Windows(R)でのネットワーク通信を行うシステム)を実現した場合に文字化けが起き る文字の一覧です。
2.3
トランザクション
データベースのアクセスにおいては、逐次的にデータベースを更新したり、いくつかの SQL 文をまとめてからデータベー スを更新したりすることが可能です。そのため、一連のデータ操作の途中で不慮のシステムダウンなどが発生すると、処 理全体を有効にするか、無効にして再度やり直しができるようにデータベースをリカバリする必要があります。このように、 一連のデータ操作の一貫性を保証する単位を“トランザクション”と呼びます。 ここでは、トランザクションについて説明します。2.3.1
トランザクションの概要
JDBC ドライバを使用するアプリケーションで、トランザクションの操作をする場合、自動でコミット処理を行う方法と手動で 制御する方法の 2 種類の方法があります。 また、トランザクションのアクセスモードと独立性水準の変更を行うことができます。2.3.2
トランザクションの有効範囲
トランザクションの有効範囲について、以下に説明します。自動コミット機能
JDBC ドライバを使用するアプリケーションでのトランザクション操作は、接続に対して行います。トランザクションは SQL 文の操作を行うと開始され、commit または rollback を実行することで終了します。JDBC ドライバを使用するアプリケー ションでは、SQL 文の実行ごとに自動的にコミット処理を行う機能があります。これを自動コミットと呼びます。 例 データベースにデータを挿入する以下のようなアプリケーションがあるとします。 アプリケーションで SQL 文に関する操作(準備、実行)を行ったタイミングで、トランザクションが開始されます。しか し、自動コミットが有効になっている場合、それぞれの操作を完了すると共にトランザクションはコミットされ、次の操作 へ継続されません。 自動コミットが有効になっているかどうかは getAutoCommit メソッドで確認する事ができます。データベースに対して コネクションを接続した直後は、自動コミットが有効になっています。トランザクションを手動で制御する方法
自動コミットが有効になっている場合、SQL 文の実行ごとに自動的にコミット処理が行われます。しかし、一般的には複数の SQL 文をひとまとめにして 1 つのトランザクションとして扱うことが多いです。 このような処理を行う場合、setAutoCommit メソッドで自動コミットを無効にします。setAutoCommit メソッドで自動コミットを無効にした場合、接続に対して commit メソッドまたは rollback メソッドを実行し
て、明示的にトランザクションを終了させる必要があります。 SQL 文の実行が何らかの原因でエラーとなり SQLException が発生した場合にも、トランザクションは継続中となってい ます。SQLSTATE が 40xx 系以外の場合、rollback メソッドを実行してトランザクションを終了させてください。 setAutoCommit メソッドはトランザクション中には実行できません。トランザクションの開始前またはトランザクションが終了 している必要があります。 例 データベースの表 tbl1 にデータを挿入し、かつ別の表 tbl2 を更新するアプリケーションがあるとします。
自動コミットを無効にしたので、SQL 文に関する操作(準備、データ設定、実行)を行っても、トランザクションはコミット されず、次の処理に継続されます。
ResultSet
を使用した場合の注意事項
トランザクションを終了させた場合、同一の接続でオープン中の ResultSet(結果セット)はすべてクローズされます。ResultSet を使用中には結果をすべて取り出すまでトランザクションを終了させないようにしてください。自動コミットが有効になっている場合の注意事項
自動コミットが有効になっている場合、順方向カーソルの結果セットの最終行の取り出しが完了すると、コミット処理が行 われます。 同一の接続に対して複数の ResultSet を同時に使用している場合、どれか 1 つでも ResultSet の最終行の取り出しが完 了すると、最終行の取り出しが完了されていない他の ResultSet はすべてクローズされます。また、ResultSet を使用中に、executeUpdate メソッドを使用して他の更新系 SQL 文を実行した場合も、ResultSet はクロー ズされます。 複数の ResultSet を同時に使用する場合や、ResultSet を使用中に他の更新系 SQL 文を実行する場合、自動コミットを 無効にしてください。
2.3.3
トランザクションのアクセスモード
アクセスモード
トランザクションのアクセスモードは、setReadOnly メソッドで読込み専用に変更することができます。 現在のトランザクションのアクセスモードが読込み専用かどうかは、isReadOnly メソッドで確認することができます。新しく 生成された接続に対するトランザクションのアクセスモードは、更新可能となっています。 トランザクションのアクセスモードは、トランザクションの継続中に変更することはできません。必ずトランザクションが終了 している状態で変更してください。 例 トランザクションのアクセスモードを読込み専用に変更する例を以下に示します。Connection cnct = DataSource.getConnection(); cnct.setAutoCommit(false); cnct.setReadOnly(true); : cnct.commit();
default_readonly
オプション
default_readonly オプションを指定することで、データベースコネクト時に、トランザクションのアクセスモードの初期値を 変更することができます。 default_readonly オプションは、運用時のチューニングパラメタとして使用してください。 default_readonly オプションの詳細については、“5.2.4.3 オプションの設定”または“B.2 getConnection メソッドのオプショ ン”を参照してください。注意
・
default_readonly オプションは、ローカルアクセスまたはリモートアクセス(RDB2_TCP 連携)時に指定可能です。・
アプリケーション内で setReadOnly メソッドを使用してトランザクションアクセスモードが変更された場合、setReadOnly メソッドで指定された値が有効になります。・
Connection.close メソッドを実行後、getConnection メソッドで再度接続した場合も、トランザクションアクセスモードの値は default_readonly オプションで指定された値で動作します。2.3.4
独立性水準
独立性水準
トランザクションの独立性水準は、setTransactionIsolation メソッドで変更することができます。データベースとのコネクショ ンを接続した直後は、独立性水準は SERIALIZABLE となっています。ただし、行単位の排他を使用している場合、トラ ンザクションの独立性水準に SERIALIZABLE と指定しても、REPEATABLE READ として扱います。トランザクションの独立性水準は、トランザクションの継続中に変更することはできません。必ずトランザクションが終了し ている状態で変更してください。 例 トランザクションの独立性水準を READ UNCOMMITTED に変更する例を以下に示します。 Connection cnct = DataSource.getConnection(); cnct.setAutoCommit(false); cnct.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_UNCOMMITTED); : cnct.commit();
default_isolation
オプション
default_isolation オプションを指定することで、データベースコネクト時に、トランザクションの独立性水準の初期値を変更 することができます。 default_isolation オプションは、運用時のチューニングパラメタとして使用してください。default_ isolation オプションの詳細については、“5.2.4.3 オプションの設定”または“B.2 getConnection メソッドのオプショ
ン”を参照してください。
注意
・
アプリケーション内で setTransactionIsolation メソッドを使用して独立性水準が変更された場合、setTransactionIsolation メソッドで指定された値が有効になります。・
Connection.close メソッドを実行後、getConnection メソッドで再度接続した場合も、独立性水準の値は default_ isolationオプションで指定された値で動作します。
占有モード指定
JDBC ドライバを利用したアプリケーションから、占有モードを設定することができます。占有モード指定とは、SQL 文単 位に読み込んだデータベース資源に対して、占有モードを設定することができる機能です。参照
占有モード指定の詳細については、“SQL リファレンス”を参照してください。2.4
データ型
Java のデータ型について説明します。2.4.1
データ型の概要
JDBC ドライバを利用するアプリケーションからデータベースにアクセスする場合、利用者は SQL のデータ型を意識した アプリケーション作りをする必要があります。Symfoware Server の SQL のデータ型に対応する Java のデータ型を以下の表に示します。
表
2.6 Symfoware Server
の
SQL
のデータ型と対応する
Java
のデータ型
分類 Symfoware Server のSQLのデー タ型 (表の列のデータ型) Javaのデータ型 参照先 真数型 SMALLINT short boolean byte 2.4.2.1 Symfowar e Server の SMALLI NT 型 INTEGER int 2.4.2.2 Symfowar e Server の INTEGER 型 NUMERIC java.math.BigDecimal long 2.4.2.3 Symfowar e Server の NUMERI C 型およ び DECIMA L 型 DECIMAL 概数型 REAL float 2.4.2.4 Symfowar e Server FLOAT(p) p=1 ~ 23分類 Symfoware Server のSQLのデー タ型 (表の列のデータ型) Javaのデータ型 参照先 の REAL 型 FLOAT(p) p=24 ~ 52 double 2.4.2.5 Symfowar e Server の DOUBLE 型 DOUBLE PRECISION 日時型 DATE java.sql.Date 2.4.2.7 Symfowar e Server の DATE 型 TIME java.sql.Time 2.4.2.8 Symfowar e Server の TIME 型 TIMESTAMP java.sql.Timestamp 2.4.2.9 Symfowar e Server の TIMEST AMP 型 文字列型 CHARACTER String 2.4.2.10 Symfowar e Server の CHAR 型および VARCHA R 型 VARCHAR 各国語 文字列型 NCHAR 2.4.2.11 Symfowar e Server の NCHAR 型および NCHAR VARYIN G 型 NCHAR VARYING
BLOB 型 BLOB byte[] 2.4.2.12
Symfowar e Server
の BLOB 型
時間隔型 INTERVAL YEAR TO MONTH 未サポート
INTERVAL YEAR INTERVAL MONTH INTERVAL DAY TO HOUR
分類
Symfoware Server のSQLのデー タ型
(表の列のデータ型)
Javaのデータ型 参照先
INTERVAL DAY TO MINUTE INTERVAL DAY TO SECOND INTERVAL DAY
INTERVAL HOUR TO MINUTE INTERVAL HOUR TO SECOND INTERVAL HOUR
INTERVAL MINUTE TO SECOND INTERVAL MINUTE
INTERVAL SECOND
Java アプリケーションでは、ResultSetMetaData の getColumnTypes メソッドで Symfoware Server の SQL のデータ型を
取得したり、CallableStatement の registerOutParameter メソッドで Symfoware Server の SQL のデータ型を指定する場合 があります。
SQL のデータ型を識別する値は java.sql.Types で規定されています。Symfoware Server の SQL のデータ型に対応する java.sql.Types の値を以下の表に示します。
表
2.7 Symfoware Server
の
SQL
のデータ型と対応する
java.sql.Types
分類 Symfoware Server のSQLのデー タ型 (表の列のデータ型) java.sql.Typesで規定されるデータ型 真数型 SMALLINT java.sql.Types.SMALLINT(推奨) java.sql.Types.BIT java.sql.Types.TINYINT INTEGER java.sql.Types.INTEGER NUMERIC java.sql.Types.NUMERIC java.sql.Types.BIGINT DECIMAL java.sql.Types.DECIMAL java.sql.Types.BIGINT 概数型 REAL java.sql.Types.REAL java.sql.Types.FLOAT FLOAT(p) p=1 ~ 23 FLOAT(p) p=24 ~ 52 java.sql.Types.DOUBLE DOUBLE PRECISION 日時型 DATE java.sql.Types.DATE TIME java.sql.Types.TIME TIMESTAMP java.sql.Types.TIMESTAMP 文字列型 CHARACTER java.sql.Types.CHAR VARCHAR java.sql.Types.VARCHAR(推奨) java.sql.Types.LONGVARCHAR 各国語 文字列型 NCHAR java.sql.Types.CHAR
NCHAR VARYING java.sql.Types.VARCHAR(推奨) java.sql.Types.LONGVARCHAR BLOB 型 BLOB java.sql.Types.BINARY
分類 Symfoware Server のSQLのデー タ型 (表の列のデータ型) java.sql.Typesで規定されるデータ型 java.sql.Types.VARBINARY java.sql.Types.LONGVARBINARY
時間隔型 INTERVAL YEAR TO MONTH 未サポート
INTERVAL YEAR INTERVAL MONTH INTERVAL DAY TO HOUR INTERVAL DAY TO MINUTE INTERVAL DAY TO SECOND INTERVAL DAY
INTERVAL HOUR TO MINUTE INTERVAL HOUR TO SECOND INTERVAL HOUR
INTERVAL MINUTE TO SECOND INTERVAL MINUTE
INTERVAL SECOND
2.4.2
Symfoware Server
のデータ型
Symfoware Server のデータ型について説明します。
2.4.2.1
Symfoware Server
の
SMALLINT
型
Java の short 型と Symfoware Server の SMALLINT 型は一致し、共に-32768 から 32767 までの 16 ビットの符号付き整
数値を表します。
Symfoware Server
の
SMALLINT
型への代入
Symfoware Server の SMALLINT 型へ代入可能な Java のデータ型は以下のとおりです。
表
2.8 Symfoware Server
の
SMALLINT
型へ代入可能な
Java
のデータ型
分類 Javaのデータ型 レベル 文字列型 String 可能 真数型 java.math.BigDecimal 可能 boolean 可能 byte 可能 short 推奨 int 可能 long 可能 概数型 float 可能 double 可能 Object 型 java.lang.Object 未サポート
・
Java の String 型のデータを Symfoware Server の SMALLINT 型へ代入する場合、格納される文字データは-32768から 32767 までの ASCII コードで表現される文字データである必要があります。
・
Java の真数型および概数型のデータを Symfoware Server の SMALLINT 型へ代入する場合、格納される数値データは-32768 から 32767 までの 16 ビットの符号付き整数値で表現できるデータである必要があります。
Symfoware Server
の
SMALLINT
型からの取り出し
Symfoware Server の SMALLINT 型から取り出し可能な Java のデータ型は以下のとおりです。
表
2.9 Symfoware Server
の
SMALLINT
型から取り出し可能な
Java
のデータ型
分類 Javaのデータ型 レベル 文字列型 String 可能 真数型 java.math.BigDecimal 可能 boolean 可能 byte 可能 short 推奨 int 可能 long 可能 概数型 float 可能 double 可能 Object 型 java.lang.Object 未サポート
・
Symfoware Server の SMALLINT 型のデータを取り出す場合、Java の short 型の使用を推奨します。・
Symfoware Server の SMALLINT 型のデータを Java の String 型へ取り出す場合、取り出すデータは ASCII コードで表現される文字列に置き換わって取り出されます。
・
Symfoware Server の SMALLINT 型のデータを Java の真数型および概数型へ取り出す場合、取り出す先のデータ型で表現できる範囲の数値である必要があります。それ以外のデータを取り出すことはできません。
2.4.2.2
Symfoware Server
の
INTEGER
型
Java の int 型と Symfoware Server の INTEGER 型は一致し、共に-2147483648 から 2147483647 までの 32 ビットの符
号付き整数値を表します。
Symfoware Server
の
INTEGER
型への代入
Symfoware Server の INTEGER 型へ代入可能な Java のデータ型は以下のとおりです。
表
2.10 Symfoware Server
の
INTEGER
型へ代入可能な
Java
のデータ型
分類 Javaのデータ型 レベル 文字列型 String 可能 真数型 java.math.BigDecimal 可能 boolean 可能 byte 可能 short 可能 int 推奨 long 可能 概数型 float 可能 double 可能
分類 Javaのデータ型 レベル
Object 型 java.lang.Object 未サポート
・
Symfoware Server の INTEGER 型にデータを格納する場合、Java の int 型の使用を推奨します。・
Java の String 型 の デ ー タ を Symfoware Server の INTEGER 型 へ 代 入 す る 場 合 、 格 納 さ れ る 文 字 デ ー タは-2147483648 から 2147483647 までの ASCII コードで表現される文字データである必要があります。
・
Java の真数型および概数型のデータを Symfoware Server の INTEGER 型へ代入する場合、格納される数値データは-2147483648 から 2147483647 までの 32 ビットの符号付き整数値で表現できるデータである必要があります。
Symfoware Server
の
INTEGER
型からの取り出し
Symfoware Server の INTEGER 型から取り出し可能な Java のデータ型は以下のとおりです。
表
2.11 Symfoware Server
の
INTEGER
型から取り出し可能な
Java
のデータ型
分類 Javaのデータ型 レベル 文字列型 String 可能 真数型 java.math.BigDecimal 可能 boolean 可能 byte 可能 short 可能 int 推奨 long 可能 概数型 float 可能 double 可能 Object 型 java.lang.Object 未サポート
・
Symfoware Server の INTEGER 型のデータを取り出す場合、Java の int 型の使用を推奨します。・
Symfoware Server の INTEGER 型のデータを Java の String 型へ取り出す場合、取り出すデータは ASCII コードで表現される文字列に置き換わって取り出されます。
・
Symfoware Server の INTEGER 型のデータを Java の真数型および概数型へ取り出す場合、取り出す先のデータ型で表現できる範囲の数値である必要があります。それ以外のデータを取り出すことはできません。
2.4.2.3
Symfoware Server
の
NUMERIC
型および
DECIMAL
型
Java の java.math.BigDecimal 型と Symfoware Server の NUMERIC 型および DECIMAL 型は一致し、共に精度と位取
りを持つ 10 進数を表します。
Symfoware Server
の
NUMERIC
型および
DECIMAL
型への代入
Symfoware Server の NUMERIC 型および DECIMAL 型へ代入可能な Java のデータ型は以下のとおりです。
表
2.12 Symfoware Server
の
NUMERIC
型および
DECIMAL
型へ代入可能な
Java
のデータ型
分類 Javaのデータ型 レベル 文字列型 String 可能 真数型 java.math.BigDecimal 推奨 boolean 可能 byte 可能 short 可能 int 可能