• 検索結果がありません。

アプリケーション開発ガイド (JDBCドライバ編)

N/A
N/A
Protected

Academic year: 2021

シェア "アプリケーション開発ガイド (JDBCドライバ編)"

Copied!
290
0
0

読み込み中.... (全文を見る)

全文

(1)

J2X1-7487-01Z0(00)

2010

1

Windows/Solaris/Linux

Symfoware Server V10.0.0

アプリケーション開発ガイド

(JDBC

ドライバ編

)

(2)

まえがき

本書の目的

本書は、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を使用し、データベースに接続する方法について説明しています。

(3)

付録C 異常時の対処 JDBCドライバ利用時に、異常が発生した際の対処方法について説明しています。 付録D 使用可能SQL文一覧 JDBCドライバを使用したアプリケーションで指定可能なSQL文について説明しています。 付録E メッセージリファレンス 各エラーメッセージに対する利用者の対処方法について説明しています。 付録F サポートAPI一覧 RDB2_TCP接続でのサポートメソッドの一覧を記載します。

注意事項

本書の説明で使用しているInterstage Application Serverのバージョンは、V9.0です。

(4)

目 次

第1章アプリケーション開発の概要...1 1.1 JDBCドライバの概要...1 1.2 利用形態...1 1.2.1 JDBCドライバの利用形態...1 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 コネクションプーリング...10

2.1.2.1 Interstage Application Serverでのコネクションプーリング...10

2.1.2.2 JDBCドライバでのコネクションプーリング...11 2.2 文字コード系の考慮...12 2.2.1 文字コード系の決定...13 2.2.2 文字コード系に関する留意事項...14 2.3 トランザクション...17 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.4.2.13 Symfoware ServerのROW_ID型...38 2.5 データ操作...39 2.5.1 データ検索について...39 2.5.2 データ更新について...40 2.5.3 ストアドプロシジャの実行について...41 2.5.4 NULLの扱いについて...42 2.5.5 ResultSetの機能について...43 2.5.5.1 ResultSetの同時複数操作...44 2.5.5.2 ResultSetの更新...44 2.6 省資源・高性能アプリケーション作成のために...45 2.6.1 オブジェクトのcloseメソッド...45 2.6.2 ステートメントキャッシュ...46 2.6.3 行識別子(SQL ROWID)を利用したデータ操作...48 2.6.4 バッチ更新機能について...50 2.7 デッドロックについて...50

(5)

2.8 国際化に対応したアプリケーションについて...50 第3章アプリケーションの作成...52 3.1 コーディング方法...52 3.2 データベースへの接続/切断...52 3.3 データ参照...54 3.4 データ更新...56 3.5 パラメタ指定でのデータ参照...57 3.6 パラメタ指定でのデータ更新...60 3.7 BLOBデータの参照...61 3.8 BLOBデータの更新...64 3.9 スクロールカーソルの実行...65 3.10 行識別子(SQL ROWID)データの取得...67 3.11 行識別子(SQL ROWID)データを利用したデータ操作...68 3.12 ResultSetの保持機能を利用したデータの参照...70 3.13 複数ResultSetの同時データ参照...72 3.14 ResultSetでのデータ更新...75 3.15 バッチ更新の実行...76 3.16 タイムゾーン指定でのデータ更新...78 3.17 エラー情報の取得...79 第4章ルーチンを利用するアプリケーションの作成...82 4.1 プロシジャルーチンを利用するアプリケーションの作成の流れ...82 4.2 プロシジャルーチンの実行...82 4.3 プロシジャルーチンの処理結果...82 4.4 プロシジャルーチン利用時のトランザクション...84 第5章アプリケーションのコンパイルおよび実行...85 5.1 アプリケーションのコンパイル...85 5.2 ネーミングサービスとJDBCデータソース登録ツール...85 5.2.1 ネーミングサービスの起動...86 5.2.1.1 Windows(R)サービス機能を利用したネーミングサービスの起動...86 5.2.1.2 Javaコマンドを使用したネーミングサービスの起動...90 5.2.2 JDBCデータソース登録ツールの起動...94 5.2.3 JDBCデータソース登録ツール...95 5.2.3.1 データソース一覧画面...95 5.2.3.2 データソースの情報設定画面...97 5.2.3.3 データソースのオプション情報設定画面...99 5.2.3.4 ctuneparamオプションについて...101 5.2.3.5 クライアント用の動作環境ファイルの指定について...123 5.2.4 symjddefdsコマンドによるJDBCデータソースの登録...124 5.2.4.1 JDBCデータソース定義ファイルとは...124 5.2.4.2 接続先情報の設定...124 5.2.4.3 オプションの設定...125 5.3 アプリケーションの実行...131

5.3.1 Interstage Application Serverを使用する場合の環境設定...131

5.3.2 Javaアプリケーションの環境設定...138 5.3.3 symjdコマンド使用時の設定...142 5.3.4 実行方法...145 5.4 アプリケーションのデバッグ...145 5.4.1 エラーメッセージによる対処...146 5.4.2 JDBCスナップによる対処...147 5.4.2.1 JDBCスナップの採取方法...147 5.4.2.2 JDBCスナップの分析方法...150 5.5 アプリケーションのチューニング...152 付録A Java言語のサンプルプログラム...153 A.1 サンプル実行前の準備...153

(6)

A.1.1 データベースの作成...153 A.1.2 初期データの追加...154 A.1.3 JDBCデータソース登録ツールの設定...154 A.2 データを参照する...155 A.3 データを更新する...156 A.4 パラメタを指定してデータを参照する...158 A.5 パラメタを指定してデータを追加する...159 A.6 スクロールカーソルを使用する...160 A.7 ストアドプロシジャを使用する...162 A.8 BLOB型の列に対する操作を行う...163 A.9 トランザクションを手動で制御する...166 A.10 独立性水準を設定する...168

A.11 Connection Manager連携...170

A.12 Interstage Application Serverを使用したアプリケーション...171

A.13 行識別子(SQL ROWID)データを利用してデータを操作する...172 A.14 ResultSetの保持機能を利用したResultSetの操作を行う...174 A.15 ResultSetを複数同時に利用してデータ参照する...175 A.16 ResultSetの更新機能を利用してデータを更新する...177 A.17 バッチ更新機能を利用してデータを更新する...178 A.18 タイムゾーン機能を利用してデータの更新を行う...180 A.19 Unicode文字のストリーム機能を利用してデータの更新を行う...181 付録B DriverManagerクラスからの接続...184 B.1 URL記述形式...184 B.2 getConnectionメソッドのオプション...185 B.3 データベースとの接続/切断...186 B.4 サンプルアプリケーション...188 付録C 異常時の対処...190 付録D 使用可能SQL文一覧...192 付録E メッセージリファレンス...196 E.1 SQLSTATEエラーメッセージ...196 E.1.1 SQLSTATEエラーメッセージ(08001)...196 E.1.2 SQLSTATEエラーメッセージ(08003~0A000)...196 E.1.3 SQLSTATEエラーメッセージ(22000~2A000)...198 E.1.4 SQLSTATEエラーメッセージ(34000~42000)...200 E.1.5 SQLSTATEエラーメッセージ(HZ080~HZxxx(xxxは3けたの数字))...202 E.1.6 SQLSTATEエラーメッセージ(S1000~S1093)...203 E.2 Vendorエラーメッセージ...204 E.2.1 Vendorエラーメッセージ(0~9)...205 E.2.2 Vendorエラーメッセージ(12~99)...206 E.2.3 Vendorエラーメッセージ(100~117)...209 E.2.4 Vendorエラーメッセージ(1000~1009)...213 E.2.5 Vendorエラーメッセージ(1010~1019)...215 E.2.6 Vendorエラーメッセージ(1020~1039)...218 E.2.7 Vendorエラーメッセージ(1040~1049)...220 E.2.8 Vendorエラーメッセージ(1050~1096)...223 E.2.9 Vendorエラーメッセージ(1100~1199)...234 E.2.10 Vendorエラーメッセージ(2000~4007)...239 E.2.11 Vendorエラーメッセージ(7001~7007)...242 E.2.12 Vendorエラーメッセージ(8000~8009)...244 E.3 symjdメッセージ...246 E.3.1 symjdメッセージ(インフォメーションメッセージ)...247 E.3.2 symjdメッセージ(異常系メッセージ)...248 付録F サポートAPI一覧...261

(7)
(8)

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のJDBCドライバでは、ネイティブブリッジ(タイプ2)とネイティブプロトコルドライバ(タイプ4)をサポートし ています。

1.2

利用形態

JDBCドライバの利用形態について説明します。

1.2.1 JDBC

ドライバの利用形態

JDBCドライバを使用したアプリケーションには、以下の種類があります。

(9)

アプリケーションの種類 説明 アプリケーションサー バ上で運用する場 合 EJB EJBサービスを使用したアプリケー ション Servlet JSP Webサーバ上で実行され、Webブ ラウザをクライアントとして使用する アプリケーション クライアント端末上で 運用する場合 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階層モデルについて説明します。

(10)

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階層モデルについて説明します。

(11)

1.4 2

階層モデル

2階層モデルでは、3階層モデルおよび4階層モデルにおけるWebサーバとアプリケーションサーバの機能をクライア ントで提供する必要があります。このため、2階層モデルは、単一の機能のみを処理するようなごく小規模なシステム で使用されます。このモデルでは、JDBCドライバはクライアントに存在します。

1.2.2

データベースへの接続形態

JDBCドライバのデータベースへの接続形態と、JDBCドライバが動作可能なプラットフォームについて、以下に示します。

接続形態

JDBCドライバからデータベースに接続するには、以下の2つの形態があります。 接続形態名 ドライバタイプ 説明 ローカルアク セス ネイティブ・ブリッ ジ(タイプ2) JDBCドライバと接続先データベースが、 同一サーバシステム上にある接続形態 です。Windows(R)、SolarisまたはLinux 上のデータベースに接続する場合に使 用します。 リモートアクセ ス (RDB2_TCP 連携) JDBCドライバと接続先データベースが、 異なるサーバシステム上にある接続形態 です。Windows(R)、Solaris、Linux、また は、グローバルサーバおよび PRIMEFORCE上のデータベースに接続 する場合に使用します。

サポートプラットフォーム

JDBCドライバが動作可能なプラットフォームには、以下があります。 動作プラットフォーム 接続可能プラット フォーム 接続形態

Windows

Solaris

Linux

Windows

Solaris

Linux

ローカルアクセス

リモートアクセス(RDB2_TCP連携)

(12)

動作プラットフォーム 接続可能プラット フォーム 接続形態

グ ロ ー バ ル サ ー バ お よ び PRIMEFOR CE

RDB2_TCP連携

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ドライバには、以下の機能があります。

JDBC2.1

以前からある機能

標準機能(Core API)

データベースとの接続/切断

データ操作(データ参照、データ更新、パラメタ指定)

トランザクションの管理(自動/手動トランザクション、コミット/ロールバック、トランザクションモード)

ストアドプロシジャの実行

データベースのメタデータの取得(データベースの定義情報を取得する機能)

例外についての情報の取得(アプリケーション実行時に発生したエラーに関する情報を取得する機能)

バッチ更新機能

カタログ取得関数強化

オブジェクト型(getObject)サポート

BLOB型(getBLOB)のサポート

新しいデータ型に関するAPIへの対応(BLOB、CLOB、オブジェクト型)

ResultSetの更新 拡張機能(JDBC 2.0 Optional Package)

JDBCデータソースを使用したデータベースとの接続(接続先データベースに関する情報を、アプリケーションとは 別に管理し、データベースに接続する機能)

コネクションプーリング(データベースへのコネクションをキャッシュする機能)

(13)

これらの機能を利用する場合、JNDIクラスライブラリおよびJDBC 2.0 Optional Packageが必要です。なお、JDK1.4以 降をご利用の場合は、JDKにJNDIクラスライブラリおよびJDBC 2.0 Optional Packageの機能が同梱されています。

JNDIクラスライブラリおよびJDBC 2.0 Optional Packageの詳細については、JNDIのホームページを参照してくださ

い。

JDBC 3.0

でサポートされた機能

ResultSetの保持

新しいデータ型に関するAPIへの対応(BOOLEAN、DATALINK/URL)

同時に複数のResultSetを利用可能

JDBC 4.0

でサポートされた機能

ROWID型サポート

1.4 JDK

との組合せ

JDBCドライバが動作可能なJDKとの組合せと、JDBC規約との対応について以下に説明します。

JDK

とは

Javaアプリケーションの開発環境です。

JDBC

規約との対応

JDBC2.X対応ドライバを使用することで、JDBC1.X規約およびJDBC2.X規約に対応したアプリケーションを動作させるこ とができます。 JDBC3.X対応ドライバを使用することで、JDBC1.XからJDBC3.X規約に対応したアプリケーションを動作させることがで きます。 JDBC4.X対応ドライバを使用することで、JDBC1.XからJDBC4.X規約に対応したアプリケーションを動作させることがで きます。 基本的にはJDBC4.X対応ドライバを利用することを推奨します。 ただし、連携する開発環境との制約でJDK6が利用できない場合には、JDKのバージョンに合った最新のバージョンのド ライバを利用してください。 また、旧バージョンのSymfoware Serverからのアップデートで、JDBC3.X以降の機能が不要な場合には、JDBC2.X対応 ドライバを利用してください。 APIのサポート状況については、“付録F サポートAPI一覧”を参照してください。

JDK

との組合せ

Interstage Application Serverに同梱されているJDKとの組合せを推奨します。

JDBCドライバは3種類用意されており、それぞれ動作可能なJDKとの組合せが異なります。 各JDBCドライバが動作可能なJDKとの組合せを以下に示します。 JDKのバージョン 動作可否 JDBC2.X対応ドライバ JDBC3.X対応ドライバ JDBC4.X対応ドライバ JDK1.1x × × × JDK1.2x × × × JDK1.3x ○ × × JDK1.4x ○ ○ × JDK5.0x ○ ○ ×

(14)

JDKのバージョン 動作可否

JDBC2.X対応ドライバ JDBC3.X対応ドライバ JDBC4.X対応ドライバ

JDK6 ○ ○ ○

以下の実行環境の場合には、使用できる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以降 5.0 Update10以 降 5.0 Update 10以降 Sun製JDK 1.4.2_08以降 (注) 対応版なし 5.0 Update2以降 5.0以降 注) 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またはWindows Server(R) 2008 R2 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またはWindows Server(R) 2008 R2 for x64の場合、以下のバージョンが使用可能

です。

Interstage Application Serverに同梱されているJDK:

5.0 Update 13以降

JDBCドライバの実行環境がWindows Vista(R)またはWindows(R) 7の場合、以下のバージョンが使用可能です。

Interstage Application Serverに同梱されているJDK: 1.4.2_14以降 Sun製JDK: 1.4.2_14以降

IPv6のネットワーク環境で運用する場合は、JDK5.0以降が必要です。

1.5

アプリケーション開発作業の流れ

JDBCドライバを利用したアプリケーションを開発する場合の作業の流れを以下に示します。

(15)
(16)

2

アプリケーションの設計

本章では、JDBCドライバを利用したアプリケーションの設計時に考慮すべき点について説明します。

2.1

コネクション

コネクションについて、以下に分類して説明します。

コネクションとは

コネクションの接続手段

コネクションの接続

コネクションの切断

コネクションとは

コネクションとは、JDBCドライバを使用するアプリケーションがSymfoware Serverにアクセスするために結んだ接続関係 のことです。アプリケーションがデータベースシステムとコネクションをもつことにより、そのデータベースシステムの資源を 操作することができます。

コネクションの接続手段

JDBCドライバを使用するアプリケーションからデータベースに接続するためには、以下の2種類の手段があります。 パッケージ API 概要 javax.sql DataSourceインタフェー ス アプリケーション内でJDBCデータ ソースを使用して、データベースに 接続する方法

java.sql DriverManagerクラス アプリケーション内で、接続先のURL

を直接指定する方法 アプリケーションサーバ上で運用する場合、DataSourceインタフェースの利用を推奨します。 本書では、DataSourceインタフェースを利用した場合を主に説明します。 データソースの設定方法については、“5.2 ネーミングサービスとJDBCデータソース登録ツール”を参照してください。

コネクションの接続

JDBCドライバを使用するアプリケーションとデータベースとのコネクションの接続は、DataSourceインタフェースの getConnectionメソッドで行います。また、コネクションを接続することにより、SQL文を実行することができます。

コネクションの切断

JDBCドライバを使用するアプリケーションとSymfoware Serverとのコネクションの切断は、Connectionインタフェースのclose メソッドで行います。コネクションの切断は、DataSourceインタフェースのgetConnectionメソッドで接続したコネクションに対 して実行できます。また、トランザクションは終了した状態で実行します。トランザクション中にコネクションが切断されると、 トランザクションも終了します。 プログラミングの概要 以下に、コネクションのプログラミング概要を示します。

InitialContext ctx = new InitialContext(); (1)

DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ds1"); (2)

Connection con = ds.getConnection(); (3) :

(17)

: con.commit(); (5) con.close(); (6) (1) JNDI環境の指定 (2) JDBCデータソースの取得 (3) データベースへの接続 (4) 自動コミットモードの無効化 (5) トランザクションのコミット (6) データベースへの接続の切断 各項目の詳細な設定方法については、“3.2 データベースへの接続/切断”を参照してください。

2.1.1

コネクションの接続形態

JDBCドライバからデータベースに対してコネクションを接続する場合、以下の接続形態があります。 接続形態 説明 ローカルアクセス JDBCドライバと接続先データベースが、同一サーバシ ステムにある接続形態です。 Windows(R)、SolarisまたはLinux上のデータベースに 接続する際に使用します。 リモートアクセス (RDB2_TCP連携) JDBCドライバと接続先データベースが、異なるサーバ システム上にある接続形態です。 Windows(R)、Solaris、Linux、または、グローバルサー バおよびPRIMEFORCE上のデータベースに接続する 際に使用します。 また、接続先のサーバのOSファイル(/etc/servicesファイルなど)にサービス名とポート番号が定義されている必要がありま す。指定するポート番号は、通信方法によって異なります。

参照

ポート番号の指定方法の詳細については、“セットアップガイド”を参照してください。

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が提供している以下

(18)

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ドライバのコネクションプーリング時の動作について、以下に説明します。 コネクション接続 初回接続時は、 コネクションプーリングを使用しない場合と同じように、データベースへ接続します。次回の接続要求 をした場合でも、プールしているコネクションがすべて使用中の場合には、新規にデータベースへ接続します。

(19)

また、最大コネクション数で設定された値以上のコネクション要求が発生した場合、JDBCドライバがエラーを返却しま す。 コネクションのプール(保持)と再利用 JDBCドライバでは、データソース接続に設定された“最大プールコネクション数”に達するまで、コネクションを保持し ていきます。接続要求をした際、プールしているコネクションの中に未使用のものが存在すると、事前に接続したコネ クションを再利用します。その後、プールしているコネクション数以上に接続要求が重なると、未使用のコネクションが 存在しないため、新たに接続してコネクションの接続本数は増加(最大コネクション数まで)していきます。 コネクションの切断 コネクションプーリング中は、アプリケーションでcloseメソッドを実施しても、データベースとの物理的なコネクションの 切断を行いません。以下の場合に、データベースとの物理的なコネクションを切断します。

プロセスが終了する場合には、データベースとの物理的なコネクションをすべて切断します。

処理途中においても、同時に接続要求が重なり、最大プールコネクション数を超えるコネクションが接続された場 合には、そのクローズ要求で、データベースとの物理的なコネクションを切断します(最大プールコネクション数内 に収まるように調整します)。

データソースとプロセスの関係

複数のプロセスから同一データソースを使用する場合、データソースに登録したコネクション数(最大コネクション数、最 大プールコネクション数)はJavaのプロセスごとに対応します。データソース登録の詳細については、“5.2.3 JDBCデータ ソース登録ツール”を参照してください。 以下の例では、データソースに最大コネクション数を16、最大プールコネクション数を5として登録しています。この時、Java アプリケーション1、Javaアプリケーション2それぞれ16まで接続が可能で、コネクションをそれぞれ5つプーリングします。

2.2

文字コード系の考慮

アプリケーション開発を行う場合に、文字コード系に関して考慮しなければならない点を説明します。

(20)

2.2.1

文字コード系の決定

Javaのアプリケーションでは、以下の文字コード系が使用できます。

EUCコード

シフトJISコード

UNICODE Javaのアプリケーションは、文字データを内部的に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オプションを設定する場合: 記述形式 javaconverter=MS932 設定方法 JDBCデータソース登録ツールの「オプション情報設定」画面で「その他パラメタ」の欄にオプションを設定してくだ さい。 クライアント用の動作環境ファイルのJAVA_CONVERTERパラメタを指定する場合: 記述形式 JAVA_CONVERTER=(MS932)

参照

クライアント用の動作環境ファイルのJAVA_CONVERTERパラメタの詳細は、“アプリケーション開発ガイド(共通編)” の“クライアント用の動作環境ファイル”を参照してください。

(21)

アプリケーション実行環境のロケールが

C

の場合

アプリケーション実行環境のロケールがCで、ASCIIコード範囲外の文字データを利用する場合、javaconverterオプショ ンまたはクライアント用の動作環境ファイルのJAVA_CONVERTERパラメタで対象データのエンコーディングを指定して ください。javaconverterオプションの詳細は、“5.2.4.3 オプションの設定”を参照してください。

参照

クライアント用の動作環境ファイルのJAVA_CONVERTERパラメタの詳細は、“アプリケーション開発ガイド(共通編)” の“クライアント用の動作環境ファイル”を参照してください。

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 種類の文字が収録されています。

(22)

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の変換規則の違い

MicrosoftWindows(R)でのシフトJISUNICODEの相互変換規則を独自に定義

Windows(R)の変換規則では日本語コードの全角文字はUNICODEの全角文字に対応させるというのが基本方針 で、そのためJISの変換規則と異なる文字がいくつかあります。

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)

(23)

これらの変換規則は、どれが正しくてどれが間違っているというものではありません。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データが正しく変換でき なくなります。 最も単純かつ確実な対処方法は、文字化けが起きる文字をシステムで使わないようにすることです。文字化けが起きる 文字はごく限られた少数のマルチバイト文字のみです。システム設計時にそれらの文字を使用しないよう注意する必要 があります。

(24)

あるいは、サーバがSolarisでクライアントがWindows(R)であるといったように使用するプラットフォームやデータベースが 特定できる場合には、データ転送時にフィルタを掛けるという対処法もあります。 たとえば、SolarisからWindows(R)に文字データを送信する際に、データ内に現れるU+301cをすべてU+ff5eに変換して から転送すれば、SolarisからWindows(R)に正しく'~'が送られるようになります。 いずれにせよ、異なるベンダのシステムをつないだシステム開発を行う際には、システム開発者が事前に自衛的手段を 講じて、文字化けの問題が起きるのを防ぐ必要があります。

参考

以下は、Javaで前述の例(SolarisとWindows(R)でのネットワーク通信を行うシステム)を実現した場合に文字化けが起きる 文字の一覧です。

2.3

トランザクション

JDBCドライバを利用する場合に、トランザクションについて考慮すべき点を説明します。

(25)

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を更新するアプリケーションがあるとします。

(26)

自動コミットを無効にしたので、SQL文に関する操作(準備、データ設定、実行)を行っても、トランザクションはコミット されず、次の処理に継続されます。

ResultSet

の保持機能

ResultSetの保持機能とは、コミット時にResultSetをクローズしない機能です。トランザクションが終了してもResultSetの操 作を行う場合に使用します。 ResultSetの保持機能は、setHoldabilityメソッドで設定します。 例 以下の例ではコミット時にResultSetをクローズしないため、コミットした後にResultSetに対してカーソル操作を行うこと ができます。

(27)

ResultSet

を使用した場合の注意事項

ResultSetの保持機能を使用しない場合は、トランザクションを終了させたときに同一の接続でオープン中のResultSet(結 果セット)はすべてクローズされます。ResultSetを使用中には結果をすべて取り出すまでトランザクションを終了させない ようにしてください。

自動コミットが有効になっている場合の注意事項

自動コミットが有効になっている場合、順方向カーソルの結果セットの最終行の取り出しが完了すると、コミット処理が行 われます。 同一の接続に対して複数のResultSetを同時に使用している場合、どれか1つでもResultSetの最終行の取り出しが完了 すると、最終行の取り出しが完了されていない他のResultSetはすべてクローズされます。 また、ResultSetを使用中に、executeUpdateメソッドを使用して他の更新系SQL文を実行した場合や、ResultSetの更新機 能を使用して更新した場合、ResultSetはクローズされます。 複数のResultSetを同時に使用する場合、ResultSetを使用中に他の更新系SQL文を実行する場合、ResultSetの更新機 能を使用する場合、およびバッチ更新機能を使用する場合は、自動コミットを無効にしてください。 バッチ更新機能については、“2.6.4 バッチ更新機能について”を参照してください。

2.3.3

トランザクションのアクセスモード

アクセスモード

トランザクションのアクセスモードは、setReadOnlyメソッドで読込み専用に変更することができます。 現在のトランザクションのアクセスモードが読込み専用かどうかは、isReadOnlyメソッドで確認することができます。新しく 生成された接続に対するトランザクションのアクセスモードは、更新可能となっています。 トランザクションのアクセスモードは、トランザクションの継続中に変更することはできません。必ずトランザクションが終了 している状態で変更してください。 例 トランザクションのアクセスモードを読込み専用に変更する例を以下に示します。 Connection cnct = DataSource.getConnection(); cnct.setAutoCommit(false); cnct.setReadOnly(true);

(28)

: cnct.commit();

default_readonly

オプション

default_readonlyオプションを指定することで、データベースコネクト時に、トランザクションのアクセスモードの初期値を変 更することができます。 default_readonlyオプションは、運用時のチューニングパラメタとして使用してください。 default_readonlyオプションの詳細については、“5.2.4.3 オプションの設定”または“B.2 getConnectionメソッドのオプショ ン”を参照してください。

注意

アプリケーション内で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 オプションで指定された値で動作します。

(29)

占有モード指定

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 java.lang.Object 2.4.2.1 Symfoware Serverの SMALLINT型 INTEGER int java.lang.Object 2.4.2.2 Symfoware Serverの INTEGER型 NUMERIC java.math.BigDecimal long java.lang.Object 2.4.2.3 Symfoware Serverの NUMERIC型お よびDECIMAL 型 DECIMAL 概数型 REAL float java.lang.Object 2.4.2.4 Symfoware ServerのREAL 型 FLOAT(p) p=1~23 FLOAT(p) p=24~52 double java.lang.Object 2.4.2.5 Symfoware Serverの DOUBLE型 DOUBLE PRECISION 日時型 DATE java.sql.Date java.lang.Object 2.4.2.7 Symfoware ServerのDATE 型 TIME java.sql.Time java.lang.Object 2.4.2.8 Symfoware ServerのTIME型 TIMESTAMP java.sql.Timestamp java.lang.Object 2.4.2.9 Symfoware

(30)

分類 Symfoware Server SQLのデータ型 Javaのデータ型 参照先 Serverの TIMESTAMP型 文字列型 CHARACTER String java.sql.Clob java.net.URL java.lang.Object java.io.Reader 2.4.2.10 Symfoware ServerのCHAR 型および VARCHAR型 VARCHAR 各国語 文字列型 NCHAR String java.lang.Object 2.4.2.11 Symfoware ServerのNCHAR 型および NCHAR VARYING型 NCHAR VARYING

BLOB型 BLOB byte[]

java.sql.Blob java.lang.Object 2.4.2.12 Symfoware ServerのBLOB 型 SQL ROWID型 ROW_ID java.sql.RowId java.lang.Object 2.4.2.13 Symfoware Serverの ROW_ID型

時間隔型 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 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 java.sql.Types.JAVA_OBJECT

(31)

分類 Symfoware Server SQLのデータ 型 java.sql.Typesで規定されるデータ型 INTEGER java.sql.Types.INTEGER(推奨) java.sql.Types.JAVA_OBJECT NUMERIC java.sql.Types.NUMERIC(推奨) java.sql.Types.JAVA_OBJECT java.sql.Types.BIGINT java.sql.Types.JAVA_OBJECT DECIMAL java.sql.Types.DECIMAL(推奨) java.sql.Types.JAVA_OBJECT java.sql.Types.BIGINT 概数型 REAL java.sql.Types.REAL(推奨) java.sql.Types.FLOAT java.sql.Types.JAVA_OBJECT FLOAT(p) p=1~23 FLOAT(p) p=24~52 java.sql.Types.DOUBLE(推奨) java.sql.Types.JAVA_OBJECT DOUBLE PRECISION 日時型 DATE java.sql.Types.DATE(推奨) java.sql.Types.JAVA_OBJECT TIME java.sql.Types.TIME(推奨) java.sql.Types.JAVA_OBJECT TIMESTAMP java.sql.Types.TIMESTAMP(推奨) java.sql.Types.JAVA_OBJECT 文字列型 CHARACTER java.sql.Types.CHAR(推奨) java.sql.Types.JAVA_OBJECT java.sql.Types.CLOB java.sql.Types.DATALINK VARCHAR java.sql.Types.VARCHAR(推奨) java.sql.Types.LONGVARCHAR java.sql.Types.JAVA_OBJECT java.sql.Types.CLOB java.sql.Types.DATALINK 各国語 文字列型 NCHAR java.sql.Types.CHAR(推奨) java.sql.Types.JAVA_OBJECT NCHAR VARYING java.sql.Types.VARCHAR(推奨)

java.sql.Types.LONGVARCHAR java.sql.Types.JAVA_OBJECT

BLOB型 BLOB java.sql.Types.BINARY(推奨) java.sql.Types.VARBINARY java.sql.Types.LONGVARBINARY java.sql.Types.JAVA_OBJECT java.sql.Types.BLOB SQL ROWID型 ROW_ID java.sql.Types.ROWID(推奨) java.sql.Types.JAVA_OBJECT

時間隔型 INTERVAL YEAR TO MONTH 未サポート

INTERVAL YEAR

INTERVAL MONTH INTERVAL DAY TO HOUR

(32)

分類 Symfoware Server SQLのデータ

java.sql.Typesで規定されるデータ型

INTERVAL DAY TO SECOND

INTERVAL DAY

INTERVAL HOUR TO MINUTE

INTERVAL HOUR TO SECOND INTERVAL HOUR

INTERVAL MINUTE TO SECOND INTERVAL MINUTE INTERVAL SECOND

注意

JDBCドライバとしては対応しているデータ型であってもSymfoware Serverが対応していない場合があります。

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 可能

Symfoware ServerのSMALLINT型にデータを格納する場合、Javaのshort型の使用を推奨します。

JavaのString型のデータをSymfoware ServerのSMALLINT型へ代入する場合、格納される文字データは-32768から 32767までのASCIIコードで表現される文字データである必要があります。

Javaの真数型および概数型のデータをSymfoware ServerのSMALLINT型へ代入する場合、格納される数値データ は-32768から32767までの16ビットの符号付き整数値で表現できるデータである必要があります。

(33)

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 可能 Object型 java.lang.Object 可能

Symfoware ServerのINTEGER型にデータを格納する場合、Javaのint型の使用を推奨します。

JavaのString型のデータをSymfoware ServerのINTEGER型へ代入する場合、格納される文字データは-2147483648 から2147483647までのASCIIコードで表現される文字データである必要があります。

(34)

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 可能 long 可能 概数型 float 可能 double 可能 Object型 java.lang.Object 可能

図 1.2 3 階層モデル (1) “ 図1.2 3階層モデル(1)”に示したモデルは、4階層モデルからアプリケーションサーバを除いた構成になります。この ため中間層であるWebサーバでビジネスロジックを実装する必要があり、データベースへのアクセスなど比較的単純 な要求を処理するシステムに適用されることが多くなります。クライアントは通常Webブラウザになります。このモデル では、JDBCドライバはWebサーバに存在します。 図 1.3 3 階層モデル (2) “ 図1.3 3階層モデル(2)”に示したモデル
図 1.4 2 階層モデル 2階層モデルでは、3階層モデルおよび4階層モデルにおけるWebサーバとアプリケーションサーバの機能をクライア ントで提供する必要があります。このため、2階層モデルは、単一の機能のみを処理するようなごく小規模なシステム で使用されます。このモデルでは、JDBCドライバはクライアントに存在します。 1.2.2  データベースへの接続形態 JDBCドライバのデータベースへの接続形態と、JDBCドライバが動作可能なプラットフォームについて、以下に示します。 接続形態 JDBCドライバから
表 2.1 JIS X 0208 01-33(WAVE DASH 、 ' ~ ') に似た UNICODE 文字
表 2.2 JIS X 0208 01-82(POUND SIGN 、 ' £ ') に対応可能な UNICODE 文字
+7

参照

関連したドキュメント

・M.2 Flash モジュール専用RAID設定サービス[PYBAS1SM2]とWindows Server 2022 Standard(16コア/Hyper-V)[PYBWPS5H]インストール/Windows Server 2019

In this diagram, there are the following objects: myFrame of the Frame class, myVal of the Validator class, factory of the VerifierFactory class, out of the PrintStream class,

発電量 (千kWh) 全電源のCO 2 排出係数. (火力発電のCO

(火力発電のCO 2 排出係数) - 調整後CO 2 排出係数 0.573 全電源のCO 2 排出係数

把握率 全電源のCO 2 排出係数 0.505. (火力発電のCO 2

(火力発電のCO 2 排出係数) - 調整後CO 2 排出係数 0.521 全電源のCO 2 排出係数

2 号機の RCIC の直流電源喪失時の挙動に関する課題、 2 号機-1 及び 2 号機-2 について検討を実施した。 (添付資料 2-4 参照). その結果、

画像 ノッチ ノッチ間隔 推定値 1 1〜2 約15cm. 1〜2 約15cm 2〜3 約15cm