javaアプリケーション開発ガイド 入門編 - fujitsu global€¦ ·  ·...

56
Javaアプリケーション開発ガイド 入門編 Javaアプリケーション開発ガイド 入門編 第2版 2011年9月 富士通株式会社 Copyright 2011 FUJITSU LIMITED

Upload: vungoc

Post on 26-May-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

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

入門編

第2版 2011年9月

富士通株式会社

Copyright 2011 FUJITSU LIMITED

Page 2: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

i

まえがき

■本書の目的

本書は、JavaアプリケーションからSymfoware Serverを利用する方法について、説明しています。

以下の内容が理解できることを目標としています。

・ JDBCを用いてJavaアプリケーションからSymfoware Serverに接続する方法

(DriverManagerを用いてSymfoware Serverに接続する方法)

・ JavaアプリケーションからSymfoware Serverにアクセスして、SQLを実行する方法

(Statementを用いてSQLを実行し、ResultSetからデータを取り出す方法)

■本書の読者

本書は、Symfoware ServerにアクセスするJavaアプリケーションを開発される方に読んでいただくよう

に書かれています。

本書を読むには、以下の知識が必要です。

・ Symfoware Serverに関する知識

・ SQLに関する知識(SELECT、INSERT、UPDATE、DELETE、COMMIT、ROLLBACK)

・ Javaに関する一般知識(クラス、メソッド、オブジェクト)

Page 3: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

ii

目次

第 1 章 アプリケーションの処理の流れ .......................................................................... 1 1.1 Javaアプリケーションからデータベースを利用する方法 ............................... 2 1.2 アプリケーションの処理の流れ ..................................................... 3

第 2 章 JDBCドライバのインストール........................................................................... 5 2.1 JDBCドライバ ..................................................................... 6 2.2 JDBCドライバのインストール ....................................................... 7 2.3 JDBCドライバのセットアップ ....................................................... 8

第 3 章 データベースへの接続 ........................................................................................ 9 3.1 データベースへの接続とは何をすることか .......................................... 10 3.2 Connectionオブジェクトを作成する方法 ............................................ 12 3.3 リモート接続とローカル接続 ...................................................... 15 3.4 リモート接続の場合のURL記述形式 ................................................. 16 3.5 ローカル接続の場合のURL記述形式 ................................................. 17 3.6 自動コミットの解除 .............................................................. 18

第 4 章 SQL文の準備 .................................................................................................... 19 4.1 データベースに処理を依頼する方法 ................................................ 20 4.2 Statementクラス ................................................................. 21

第 5 章 データの挿入、更新、削除 ............................................................................... 23 5.1 データを挿入、更新、削除する方法 ................................................ 24

第 6 章 データの検索 .................................................................................................... 26 6.1 データを検索する方法 ............................................................ 27

第 7 章 検索結果の取り出し .......................................................................................... 30 7.1 ResultSetクラス ................................................................. 31 7.2 ResultSetオブジェクトのカーソル ................................................. 32 7.3 ResultSetオブジェクトから値を取り出す方法 ....................................... 34

第 8 章 後始末 ............................................................................................................... 35 8.1 オブジェクトのクローズ .......................................................... 36 8.2 データベースからの切断 .......................................................... 37

第 9 章 例外処理 ........................................................................................................... 38 9.1 SQLException .................................................................... 39

付録A サンプルプログラム .......................................................................................... 42 A.1 サンプルで扱う表 ................................................................ 43

Page 4: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

iii

A.2 データを検索するプログラム ..................................................... . 46

. 50A.3 データを更新するプログラム .....................................................

Page 5: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

1

第1章 アプリケーションの処理の流れ

Javaのアプリケーションからデータベースを利用する場合、アプリケーションの処理の

流れには、決まった手順があります。

具体的なアプリケーションの説明に入る前に、本章ではアプリケーションの全体的な流

れについて説明します。

Page 6: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

2

1.1 Javaアプリケーションからデータベースを利

用する方法

Java のアプリケーションから一般的なデータベースを利用するには、JDBC という API を用

います。JDBC は、Java の標準 API の一部です。

アプリケーションは JDBC の API を用いて、データベースに SQL 文の実行を依頼し、結果を

受け取ります。

データベース JDBCドライバ Javaアプリケーション

SQL

検索結果

クライアントコンピュータ データベースサーバ

Page 7: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

3

1.2 アプリケーションの処理の流れ

アプリケーションは、JDBC の API を利用して、JDBC の様々なオブジェクトを作成します。

そして、JDBC のオブジェクトのメソッドを使用することで、データベースにアクセスしま

す。

JDBC の API は、特定のデータベースソフトに依存しません。そのため、どのデータベース

ソフトを使っていても、共通の方法でデータベースにアクセスすることができます。

データベースを検索する処理を行う場合、処理の流れは以下のようになります。

データベースに接続する。(Connectionオブジェクトを作成する)

SQL文を準備する。(Statementオブジェクトを作成する)

検索を実行する。(ResultSetオブジェクトを作成する)

検索結果を取り出す。

作成したオブジェクトをクローズする。

Page 8: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

4

データベースを更新する処理を行う場合、処理の流れは以下のようになります。

データベースに接続する。(Connectionオブジェクトを作成する)

SQL文を準備する。(Statementオブジェクトを作成する)

更新を実行する。

作成したオブジェクトをクローズする。

Page 9: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

5

第2章 JDBCドライバのインストール

Javaのアプリケーションからデータベースを利用するには、JDBCのAPIを使用します。

JDBCのAPIを使用するためには、JDBCドライバが必要です。

JDBCドライバは、データベース製品ごとに専用のものが付属しています。本章ではJDBC

ドライバを使用できるようにする方法について説明します。

Page 10: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

6

2.1 JDBCドライバ

JDBC の API を用いてデータベースを利用するには、JDBC の機能を実装した JDBC ドライバ

が必要です。JDBC ドライバは、データベースソフトのベンダから提供されています。

JDBC の API はデータベースソフトに依存しませんが、データベースを利用するための方法

(SQL 文を送ったり、結果を受け取ったりする方法)は、データベースソフトごとに異なっ

ています。その差を、JDBC ドライバが吸収しています。

すなわち、JDBC を用いてデータベースを利用する Java のアプリケーションの処理手順はど

のデータベースでも共通ですが、JDBC ドライバは利用するデータベースソフト専用のもの

を使用する必要があります。アプリケーションは、JDBC の API を利用して、JDBC の様々な

オブジェクトを作成します。そして、JDBC のオブジェクトのメソッドを使用することで、

データベースにアクセスします。

[補足]JDBC の API がすべて使用可能とは限らない。

Java の API は容易に拡張することが可能なため、データベースソフトのベンダによって、JDBC の

API が拡張されている場合があります。また、JDBC の規格で決まっている API が、JDBC ドライバで

すべて実装されているとは限りません。

そのため、JDBC を用いた Java アプリケーションが、どのデータベースソフトでも完全に共通に動

作するわけではありません。

Page 11: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

7

2.2 JDBCドライバのインストール

Symfoware Server の製品には、Symfoware Server 専用の JDBC ドライバが付属しています。

JDBC ドライバは、Symfoware Server クライアント機能をインストールすることでインスト

ールされます。また、Symfoware Server サーバ機能をインストールすると、同時にクライ

アント機能もインストールされます。

インストール方法の詳細は、それぞれ以下を参照してください。

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition の場合、マニュアル“インストールガイ

ド(クライアント編)”および“インストールガイド(サーバ編)”。

Symfoware Server Lite Edition の場合、マニュアル“インストールガイド(クライアント

編)”および“データベース簡単運用ガイド”。

Page 12: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

8

2.3 JDBCドライバのセットアップ

JDBC ドライバを使用するには、JDBC ドライバの実行環境を設定しておく必要があります。

実行環境の設定とは、各種のモジュールへのパスを環境変数に設定することです。

CLASSPATH、PATH、LD_LIBRARY_PATH 等の環境変数に、必要なモジュールのパスを設定しま

す。

Symfoware Server V10 では、3種類の JDBC ドライバのモジュールが付属しています。それ

ぞれ対応している JDBC の規約のバージョンが異なっています。通常は、最新版である

JDBC4.x 対応のモジュールを使用してください。

詳細は、マニュアル“アプリケーション開発ガイド(JDBC 編)”の“アプリケーションの実

行”を参照してください。

[補足]

Windows 版の Symfoware Server では、必要な設定がインストーラによって自動的に行われます。

Page 13: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

9

第3章 データベースへの接続

Javaのアプリケーションからデータベースを利用するには、まずデータベースに接続す

る必要があります。

データベースに接続するとは、JDBCのAPIを使用してConnectionオブジェクトを作成する

ことです。

本章では、Connectionオブジェクトを作成する方法を説明します。

Page 14: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

10

3.1 データベースへの接続とは何をすることか

■接続とは、通信を確立すること

アプリケーションがデータベースを利用するためにまず行うべきことは、アプリケーショ

ンからデータベースに接続することです。

データベースを管理している Symfoware Server と、データベースを利用する Java アプリ

ケーションは、別々のプログラムです。Java アプリケーションが Symfoware Server に処理

を依頼して結果を受け取るためには、二つのプログラムが通信を行う必要があります。

Java アプリケーションが Symfoware Server との通信ができるようにすることを、「データ

ベースに接続する」と言います。

■通信の確立は JDBC ドライバで行う

JDBC には、データベースに接続する処理を行うための API が用意されています。アプリケ

ーションは、この API を用いてデータベースに接続します。

アプリケーションは、JDBC の API を通じて、どのデータベースに接続したいのか、接続し

ようとしているユーザーは誰なのか、といった情報を、JDBC ドライバに伝えます。

通信の確立や実際のデータベースサーバとの通信は、JDBC ドライバが行います。

■通信の確立とは、Connection オブジェクトを作成すること

Java アプリケーションにおいてデータベースに接続するということは、Connection オブジ

ェクトを作成することと同義です。Connection クラスは JDBC で定義されている、データベ

ースへの接続を表すクラスです。

Page 15: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

11

JDBC の API を用いてデータベースに接続すると、Connection オブジェクトが作成されます。

アプリケーションは、その後のデータベースに関する様々な処理を、Connection オブジェ

クトを用いて実行します。

Page 16: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

12

3.2 Connectionオブジェクトを作成する方法

Connection オブジェクトを作成する方法は 2種類ありますが、ここでは簡単な方の方法を

説明します。

Java アプリケーションから Symfoware Server に接続するためには、DriverManager クラス

を用いて、以下のようにします。

(例)

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

Connection con = DriverManager.getConnection(

"jdbc:symford://myhost:26551/COMPANY",

"UID","PWD");

2

3

1

この処理の流れは、どのデータベースソフトでも共通のおまじないです。このおまじない

の中で、以下を指定しています。

① どの JDBC ドライバを使用するのか。

Symfoware Server を利用する場合は、常に“com.fujitsu.symfoware.jdbc.SYMDriver”

を指定します。

Page 17: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

13

② どのデータベースに接続するのか。

接続先のデータベースに関する情報を決められたフォーマットで指定します。この情

報を URL と呼びます。URL の書き方はデータベースソフトによって異なります。

③ 誰がデータベースを利用するのか。

データベースを利用するユーザーのユーザー名とパスワードを指定します。

この例では、データベースに接続するのは「UID」という名前のユーザーで、そのパス

ワードは「PWD」であることを意味しています。

URL の書き方の詳細は、次節以降で説明します。

上記の例の「jdbc:symford://myhost:26551/COMPANY」という URL は、以下のことを示して

います。

接続するデータベースがあるのは、myhost というマシンである。

接続するためのポート番号は 26551 である。

接続するデータベースの名前は COMPANY である。

アプリケーションが動作するマシンから、myhost というマシンにリモート接続する。

[補足] Connection オブジェクトを作成するためのもう一つの方法

DataSource オブジェクトの getConnection メソッドを用いることで Connection オブジェクトを作

成することもできます。具体的な方法は、“Java アプリケーション開発ガイド 一般編”で説明し

ます。

[補足] おまじないの意味

DriverManager は JDBC の管理を行っています。JDBC ドライバを使用するためには、その JDBC ドラ

イバが DriverManager に登録されている必要があります。

Page 18: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

14

Class.forName メソッドを実行することによって、指定した JDBC ドライバがロードされます。クラ

スをロードしただけでは DriverManager には登録されません。しかし、Java には STATIC イニシャ

ライザという仕組みがあります。クラスをロードしたとき、そのクラスの中の static で宣言された

コードが 1回だけ実行されます。

クラスのロード時に 1回だけ実行される部分で、JDBC ドライバを DriverManager に登録するように

なっています。

そのため、Class.forName メソッドで JDBC ドライバのクラスをロードするだけで、JDBC ドライバの

機能を使用できるようになります。

[補足] DriverManager オブジェクトはいつ作られたのか

DriverManager のメソッドは static であり、DriverManager クラスのインスタンスを作成しなくて

も、いつでも呼び出すことができます。

getConnection メソッドを利用するために DriverManager オブジェクトを作成する必要はありませ

ん。

実は DriverManager のコンストラクタは private になっているので、DriverManager オブジェクト

をアプリケーションが作成することはできません。

Page 19: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

15

3.3 リモート接続とローカル接続

DriverManagerクラスのgetConnectionメソッドでConnectionオブジェクトを作成する際、

接続先のデータベースを指定するために記述する文字列を URL と呼びます。

URL の書き方は、データベースへの接続方式によって異なります。Symfoware Server には、

リモート接続とローカル接続の 2種類の接続方式があります。

リモート接続

Java アプリケーションと Symfoware Server が別々のコンピュータ上で動作している場

合の接続方式です。2台のコンピュータ間で通信を行う必要があるため、TCP/IP を用

いて通信を行います。Symfoware Server では、これを RDB2_TCP 連携と呼びます。

ローカル接続

Java アプリケーションと Symfoware Server が同一のコンピュータ上で動作している場

合の接続方式です。プログラム同士の通信は 1台のコンピュータ内で行われます。

[補足] RDA-SV 連携

Symfoware Server V9 までは、2台のコンピュータ間で通信を行うときに RDA-SV というソフトウェ

アを使用する方式も使われていました。しかし、これは古い方式であるため、Symfoware Server V10

からは RDA-SV 連携は廃止されました。

Page 20: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

16

3.4 リモート接続の場合のURL記述形式

リモート接続の場合は、以下の形式で記述します。

jdbc:symford://<host>:<port_no>/<db_env>[;<options>]

リモート接続の場合、接続先のコンピュータを指定する必要があります。別のコンピュー

タと通信を行うには、接続先のコンピュータを特定する情報としてホスト名または IP アド

レス(<host>の部分)と、通信を行うためのポート番号(<port_no>の部分)を指定する必

要があります。

コンピュータを特定する情報に続けて、データベースを特定する情報としてデータベース

名(<db_env>)を指定します。

接続先のコンピュータで複数の Symfoware/RDB を動作させている場合もありますが、リモ

ート接続の場合には RDB システム名を指定する必要はありません。なぜなら、RDB システム

ごとにポート番号が異なっているからです。ポート番号を指定することで、接続先の RDB

システムは特定されます。

URL に指定できるオプション(<options>の部分)は、ローカル接続の場合と同じです。

URL の書き方、指定できるオプションの詳細については、マニュアル“アプリケーション開

発ガイド(JDBC 編)”の“DriverManager クラスからの接続”を参照してください。

Page 21: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

17

3.5 ローカル接続の場合のURL記述形式

ローカル接続の場合は、以下の形式で記述します。

jdbc:symfold:///[<db_sys>.]<db_env>[;<options>]

ローカル接続であれば、接続先のコンピュータを指定する必要はありません。指定する必

要があるのは、接続先のデータベース名(<db_env>の部分)です。

もし、1台のコンピュータで複数の Symfoware/RDB を動作させているなら(RDB システム名

を付ける運用をしているなら)、接続先の RDB システム名(<db_sys>の部分)も指定する

必要があります。

接続先以外の情報をオプションとして追加することもできます(<options>の部分)。ここ

には、アプリケーションの動作環境をチューニングするためのパラメーターや、接続する

ユーザー名やパスワードなどを指定できます。

URL の書き方、指定できるオプションの詳細については、マニュアル“アプリケーション開

発ガイド(JDBC 編)”の“DriverManager クラスからの接続”を参照してください。

[補足]

接続するユーザー名やパスワードは、getConnection メソッドの引数としても指定できますが、URL

内に指定しておくこともできます。

Java ではオーバーロードという仕組みを用いて、引数の型や個数が異なるメソッドを同じ名前で複

数定義することができます。そのため、同じメソッドであっても、状況によって引数の設定方法を

変えることができます。

使用可能なメソッドの詳細は、マニュアル“Java API リファレンス”を参照してください。

Page 22: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

18

3.6 自動コミットの解除

Connection オブジェクトを作成したら、データベースに対して様々な処理を依頼すること

ができます。

しかし、データベースにアクセスする前に、まず自動コミットの解除を行っておきます。

JDBC のデフォルトでは、SQL 文を 1個実行するたびに自動的にコミット処理が行われるよ

うになっています。つまり、複数の SQL 文を 1個のトランザクションとして扱うことがで

きません。

そこで、Connection オブジェクトを作成したら、最初に自動コミットを解除します。

自動コミットを解除するには、Connection オブジェクトの setAutoCommit メソッドを用い

ます。

(例)

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

[補足]

SQL 文ごとに自動的にコミットさせたいならば、設定を変更する必要はありません。

Page 23: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

19

第4章 SQL文の準備

Connectionオブジェクトを作成したら、データベースにデータの検索やデータの更新を

依頼することができます。データベースへの処理の依頼は、SQL文を用います。

JavaのアプリケーションでSQL文を扱うには、SQL文を表すオブジェクトを作成する必要

があります。本章では実行したいSQL文のオブジェクトを作成する方法について説明します。

Page 24: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

20

4.1 データベースに処理を依頼する方法

データベースのデータを検索したり更新したりするためには、SQL を用います。

Java アプリケーションからデータベースサーバに SQL 文を送信するためには、まず SQL 文

を表すオブジェクトを作成する必要があります。

JDBC では、SQL 文は Statement クラスのオブジェクトとして表します。

Page 25: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

21

4.2 Statementクラス

Statement オブジェクトは、Connection オブジェクトの createStatement メソッドを用い

て作成します。

(例)

// Statement オブジェクトを作成する。

Statement stmt = con.createStatement();

Statement オブジェクトを作成した段階では、まだ SQL 文自体は設定しません。SQL 文を指

定するのは、SQL 文を実行するときです。

(例)

// Statement オブジェクトを作成する。

Statement stmt = con.createStatement();

// SELECT 文を実行して、検索結果を受け取る。

ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE");

(例)

// Statement オブジェクトを作成する。

Page 26: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

22

Statement stmt = con.createStatement();

// DELETE 文を実行する。

stmt.executeUpdate("DELETE FROM GENERAL.EMPLOYEE WHERE ID=1");

例えばデータを更新する SQL 文を実行する場合、Statement オブジェクトの executeUpdate

メソッドを用います。また、データを検索する SQL 文を実行する場合、Statement オブジェ

クトのexecuteQueryメソッドを用います。SQL文はexecuteUpdateメソッドやexecuteQuery

メソッドを実行する際、メソッドの引数として指定します。

すなわち、Statement オブジェクトには SQL 文をデータベースに送信して実行させるための

メソッドが用意されており、そのメソッドに SQL 文を文字列(String オブジェクト)として

渡すことで、SQL 文を実行することができます。

Page 27: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

23

第5章 データの挿入、更新、削除

SQL文を表すStatementオブジェクトには、SQL文を実行するためのメソッドが用意されて

います。INSERT文、UPDATE文、DELETE文といった、データベースを更新するSQL文を実行す

る場合には、executeUpdateメソッドを用います。

本章では更新系のSQL文を実行する方法について説明します。

Page 28: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

24

5.1 データを挿入、更新、削除する方法

データベースの更新は、SQL 文の INSERT 文、DELETE 文、UPDATE 文を用います。これらの

SQL 文を実行するには、executeUpdate メソッドを利用します。

手順は以下のようになります。

表にデータを INSERT するには、以下のようにします。

(例)

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

Connectionオブジェクトを作成する。

ConnectionオブジェクトからStatementオブジェクトを作成する。

StatementオブジェクトのexecuteUpdateメソッドを実行する。

Page 29: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

25

// 自動コミットを解除する。

con.setAutoCommit(false);

// Statement オブジェクトを作成する。

Statement stmt = con.createStatement();

// INSERT 文を実行する。

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(1,'tiger')");

// Statement オブジェクトを破棄する。

stmt.close();

// INSERT 文をコミットする。

con.commit();

// データベースから切断する。

con.close();

UPDATE 文や DELETE 文を実行したい場合は、INSERT 文の場合と同様に、Statement オブジェ

クトの executeUpdate メソッドの引数で、SQL 文を指定します。

Page 30: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

26

第6章 データの検索

SQL文を表すStatementオブジェクトには、SQL文を実行するためのメソッドが用意されて

います。SELECT文を実行する場合には、executeQueryメソッドを用います。

本章ではデータベースを検索して結果を得るSQL文を実行する方法について説明します。

Page 31: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

27

6.1 データを検索する方法

データベースの検索は、SQL 文の SELECT 文を用います。SELECT 文を実行するには、

executeQuery メソッドを利用します。

executeQuery メソッドを実行すると、ResultSet オブジェクトが作成されます。ResultSet

オブジェクトは、検索結果を表すオブジェクトです。ResultSet オブジェクトについては、

次章で説明します。

検索結果を参照するには、ResultSet オブジェクトのメソッドを用いて値を取り出します。

手順は以下のようになります。

Connectionオブジェクトを作成する。

ConnectionオブジェクトからStatementオブジェクトを作成する。

StatementオブジェクトのexecuteQueryメソッドを実行する。

ResultSetオブジェクトが作成される。

ResultSetオブジェクトから検索結果を取り出す。

Page 32: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

28

SELECT 文を実行して検索結果を得るには、以下のようにします。

(例)

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

// Statement オブジェクトを作成する。

Statement stmt = con.createStatement();

// SELECT 文を実行して、ResultSet オブジェクトを得る。

ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1");

// ResultSet から 1 行ずつデータを取り出す。

while (rs.next())

{

// ID と NAME の値を取り出す。

int iID = rs.getInt(1);

Page 33: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

29

String sName = rs.getString(2);

// 取り出した値を表示させる。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

// ResultSet オブジェクトを破棄する。

rs.close();

// Statement オブジェクトを破棄する。

stmt.close();

// SELECT 文をコミットする。

con.commit();

// データベースから切断する。

con.close();

Page 34: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

30

第7章 検索結果の取り出し

SELECT文を実行すると、検索結果がデータベースから返却されます。検索結果は

ResultSetオブジェクトとして作成されています。

本章ではResultSetオブジェクトから検索結果の値を取り出す方法について説明します。

Page 35: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

31

7.1 ResultSetクラス

executeQuery メソッドを用いてデータベースの検索を行うと、検索結果を表す ResultSet

オブジェクトが作成されます。

SELECT 文を実行して得られる検索結果は、1個の表の形をしています。例えば「SELECT

ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1」という SELECT 文を実行した結果は、ID 列と

NAME 列で構成される 1個の表になります。ResultSet は、この表を表すオブジェクトです。

ResultSet オブジェクトを用いて、検索結果の表を行単位で操作することができます。

検索結果の値を得るには、検索結果の特定の行に位置づけ、ResultSet オブジェクトのメソ

ッドを用いて ResultSet オブジェクトから値を取り出します。

Page 36: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

32

7.2 ResultSetオブジェクトのカーソル

検索結果の表のデータは、1度に 1行ずつ参照することができます。そのためには、どの行

を参照するのかを指定する必要があります。参照する行を指定するためにカーソルという

仕組みを用います。

ResultSet オブジェクトには 1個のカーソルが用意されています。カーソルを 1行ずつ進め

ながら、検索結果を 1行ずつ参照します。カーソルを 1行進めるためには、ResultSet オブ

ジェクトの next メソッドを実行します。

ResultSetオブジェクトが作成された時点では、カーソルは第0行に位置づけられています。

したがって、検索結果の最初の行を参照するには、まず最初に next メソッドを呼び出す必

要があります。

1 tiger

3 cat

4 monkey

7 snake

9 beaver

ResultSet

第1行

第2行

カーソル

第1列

nextで1行進む

SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE

SECTION=’A’の検索結果

第2列

Page 37: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

33

(例)

// next メソッドでカーソルを 1 行ずつ進める。

while (rs.next())

{

// ID と NAME の値を取り出す。

int iID = rs.getInt(1);

String sName = rs.getString(2);

// 取り出した値を表示させる。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

結果の行があればtrue、

なければfalseが返る。

nextメソッドを実行。

検索結果の最終行まで達した状態で、さらに next メソッドを実行すると、next メソッドは

false を返します。これによって、アプリケーションはすべての検索結果を参照し終わった

ことを知ることができます。

もしも SELECT 文による検索の結果、条件に合うレコードが 1行も存在しなかったらどうな

るでしょうか。その場合、結果が 1行もない ResultSet オブジェクトが作成されます。そ

して、最初の next メソッドの呼び出しで false が返却されます。

Page 38: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

34

7.3 ResultSetオブジェクトから値を取り出す方法

カーソルである行に位置づけたら、ResultSet オブジェクトからデータを取り出すことがで

きます。データを取り出すメソッドはデータの型ごとに用意されています。それらのメソ

ッドは getXXXX という形の名前になっており、getter メソッドと呼ばれます。

データを取り出す列は、先頭から何番目かという順番で指定します。前節の例では、「SELECT

ID,NAME FROM GENERAL.EMPLOYEE WHERE SECTION='A'」の結果を想定しています。検索結果

の表は、1番目の列が ID、2 番目の列が NAME になっています。

「getString(2)」という操作は、2番目の列にあるデータを文字列として取り出すことを意

味しています。これによって、Java アプリケーションの中で利用できる String オブジェク

トとして、NAME の値が取り出されます。

[補足]

ResultSet から列の値を取り出す方法には、列の番号を指定する方法のほかに、列名を指定する方

法もあります。列名を指定すると結果表の列の並び順を考慮する必要がないため、プログラムが柔

軟になります。一方、列の番号を指定する方が処理は効率的に行えます。

Page 39: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

35

第8章 後始末

Javaのアプリケーションからデータベースを利用するために、様々なオブジェクトを作

成します。処理が終了したら、それらのオブジェクトを削除します。

本章では用の済んだオブジェクトを破棄する方法について説明します。

Page 40: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

36

8.1 オブジェクトのクローズ

Java のアプリケーションでは、使用しなくなったオブジェクトは JavaVM のガベージコレク

タによって、自動的に破棄されます。

しかし、データベースをアクセスするアプリケーションでは、使用しなくなったオブジェ

クトは close メソッドを実行して、明示的にオブジェクトを破棄するようにしてください。

例えば、Connection オブジェクトを作成するということは、データベースに接続すること

を意味します。処理が終わった後も Connection オブジェクトをそのままにしておくと、ず

っとデータベースに接続したままになっています。

データベースは多数のユーザーが共同で使用するものです。データベースに同時に接続で

きるユーザー数は限られています。そのため、用が済んだのにデータベースに接続したま

まにしておくと、データベースを使用したい別のユーザーが接続できなくなってしまいま

す。

Page 41: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

37

8.2 データベースからの切断

データベースを利用する処理が終了したら、データベースへの接続を切断する必要があり

ます。切断は、Connection オブジェクトの close メソッドを呼び出すことで行います。

(例)

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// データベースから切断する。

con.close();

同時にデータベースに接続できる個数は、データベースサーバの設定によって制限されて

います。自分の処理が済んだのにデータベースからの切断を行わないと、他のユーザーが

データベースに接続できなくなることがあります。そのため、処理が終了したらデータベ

ースから切断するようにしてください。

Page 42: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

38

第9章 例外処理

Javaのアプリケーションでは、エラー事象を例外という仕組みで扱います。

本章ではデータベースを利用する処理で発生した例外を処理する方法について説明しま

す。

Page 43: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

39

9.1 SQLException

Java のアプリケーションでは、例外という仕組みを用いてエラーを扱います。例外は

Exception クラスで表されます。

JDBC を用いたデータベースの操作でエラーが発生した場合も、例外が発生します。データ

ベースに関する例外は、Exception クラスを継承した SQLException クラスで表します。

JDBC のオブジェクトは、エラーを検出すると SQLException クラスの例外をスローします。

アプリケーションはこの例外をキャッチして、SQLEexception オブジェクトから SQLSTATE

やエラーメッセージなどの情報を取り出すことができます。

SQLSTATE やエラーメッセージの意味については、マニュアル“アプリケーション開発ガイ

ド(JDBC 編)”を参照してください。

(例)

try

{

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

// Statement オブジェクトを作成する。

Page 44: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

40

Statement stmt = con.createStatement();

// SELECT 文を実行して、ResultSet オブジェクトを得る。

ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1");

// ResultSet から 1 行ずつデータを取り出す。

while (rs.next())

{

// ID と NAME の値を取り出す。

int iID = rs.getInt(1);

String sName = rs.getString(2);

// 取り出した値を表示させる。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

// ResultSet オブジェクトを破棄する。

rs.close();

// Statement オブジェクトを破棄する。

stmt.close();

Page 45: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

41

// INSERT 文をコミットする。

con.commit();

// データベースから切断する。

con.close();

}

// データベースに関する例外をキャッチする。

catch (SQLException e)

{

// 例外オブジェクトからエラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

System.out.println("SQLSTATE : " + e.getSQLState());

System.out.println("ERROR CODE : " + e.getErrorCode());

e.printStackTrace();

}

// データベース以外のエラーが発生した場合の例外をキャッチする。

catch (Exception e)

{

// エラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

}

Page 46: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

42

付録A サンプルプログラム

本書で説明した内容を使用するJavaのアプリケーションのサンプルを示します。

Page 47: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

43

A.1 サンプルで扱う表

■表の構成

本章のサンプルプログラムでは、以下のデータベースにアクセスするとします。

データベース名 COMPANY

スキーマ名 GENERAL

表名 EMPLOYEE

表の構成は以下のとおりとします。

列名 データ型

ID INT

NAME CHARACTER(10)

データベースは Windows 上に作成し、ローカル接続でアクセスするものとします。

■表の作成

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition では、表を作成する際、表定義の他に表

に対応する DSI と DSO を定義し、データの格納先となるデータベーススペースを定義する

必要があります。Symfoware Server Lite Edition では、デフォルトデータベーススペース

に作成されます。各種の資源の定義操作は、Symfoware Server に付属している WebDBtools

という Web ブラウザベースのツールを用いて、対話的に行うことができます。

定義操作を DDL 文を直接実行することによって行うこともできます。その場合は、以下の

DDL 文を rdbddlex コマンドで実行してください。

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition の場合

Page 48: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

44

CREATE DATABASE COMPANY;

CREATE DBSPACE MYDBSP_1 ALLOCATE FILE C:¥COMPANY.dbs ATTRIBUTE SPACE (1M);

CREATE SCHEMA GENERAL;

CREATE TABLE GENERAL.EMPLOYEE (ID INT,NAME CHARACTER(10));

CREATE DSO DSO01 FROM GENERAL.EMPLOYEE TYPE SEQUENTIAL (PAGESIZE(4));

CREATE DSI DSI01 DSO DSO01 ALLOCATE DATA ON MYDBSP_1 SIZE 100K;

GRANT ALL PRIVILEGES ON GENERAL.EMPLOYEE TO PUBLIC;

GRANT ALL PRIVILEGES ON SCHEMA GENERAL TO PUBLIC;

GRANT ALL PRIVILEGES ON DBSPACE MYDBSP_1 TO PUBLIC;

Symfoware Server Lite Edition の場合

CREATE DATABASE COMPANY;

CREATE SCHEMA GENERAL;

CREATE TABLE GENERAL.EMPLOYEE (ID INT,NAME CHARACTER(10));

GRANT ALL PRIVILEGES ON GENERAL.EMPLOYEE TO PUBLIC;

GRANT ALL PRIVILEGES ON SCHEMA GENERAL TO PUBLIC;

GRANT ALL PRIVILEGES ON DBSPACE MYDBSP_1 TO PUBLIC;

■表へのデータ投入

Page 49: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

45

表を作成したら、初期データを格納しておきます。

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition の場合、データを投入するには、rdbsloader

コマンドを使用します。

rdbsloader -mi -i COMPANY.DSI01 -t C:¥TABLE01.dat

ここで、TABLE01.dat は、以下のような内容のテキストファイルです。これが初期投入する

データとなります。

1,”dog”

2,”cat”

3,”lion”

Symfoware Server Lite Edition の場合、データを投入するには、rdbupt コマンドを使用

します。

rdbupt –ma –b COMPANY.GENERAL.EMPLOYEE –t C:¥TABLE01.dat

Page 50: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

46

A.2 データを検索するプログラム

データを検索する Java アプリケーションです。

Symfoware Server に接続するユーザーのユーザー名を“UID”、パスワードを“PWD”とし

ています。環境に合わせて変更してください。

import java.sql.*;

import java.io.*;

public class test01

{

public static void main(String args[])

{

try

{

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

Page 51: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

47

con.setAutoCommit(false);

// Statement オブジェクトを作成する。

Statement stmt = con.createStatement();

// SELECT 文を実行して、ResultSet オブジェクトを得る。

ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1 OR ID=3");

// ResultSet から 1 行ずつデータを取り出す。

while (rs.next())

{

// ID と NAME の値を取り出す。

int iID = rs.getInt(1);

String sName = rs.getString(2);

// 取り出した値を表示させる。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

// ResultSet オブジェクトを破棄する。

rs.close();

Page 52: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

48

// Statement オブジェクトを破棄する。

stmt.close();

// INSERT 文をコミットする。

con.commit();

// データベースから切断する。

con.close();

}

// データベースに関する例外をキャッチする。

catch (SQLException e)

{

// 例外オブジェクトからエラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

System.out.println("SQLSTATE : " + e.getSQLState());

System.out.println("ERROR CODE : " + e.getErrorCode());

e.printStackTrace();

}

// データベース以外のエラーが発生した場合の例外をキャッチする。

catch (Exception e)

{

Page 53: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

49

// エラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

}

}

}

Page 54: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

50

A.3 データを更新するプログラム

データを更新する Java アプリケーションです。

Symfoware Server に接続するユーザーのユーザー名を“UID”、パスワードを“PWD”とし

ています。環境に合わせて変更してください。

import java.sql.*;

import java.io.*;

public class test02

{

public static void main(String args[])

{

try

{

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

Page 55: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

51

// Statement オブジェクトを作成する。

Statement stmt = con.createStatement();

// INSERT 文を実行する。

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(4,'tiger')");

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(5,'monkey')");

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(6,'rat')");

// UPDATE 文を実行する。

stmt.executeUpdate(

"UPDATE GENERAL.EMPLOYEE SET NAME = 'gorilla' WHERE ID=5");

// DELETE 文を実行する。

stmt.executeUpdate(

"DELETE FROM GENERAL.EMPLOYEE WHERE id=6");

// 更新をコミットする。

con.commit();

// Statement オブジェクトを破棄する。

stmt.close();

Page 56: Javaアプリケーション開発ガイド 入門編 - Fujitsu Global€¦ ·  · 2018-01-31Javaアプリケーション開発ガイド 入門編 . Javaアプリケーション開発ガイド

Javaアプリケーション開発ガイド 入門編

Copyright 2011 FUJITSU LIMITED

52

// データベースから切断する。

con.close();

}

// データベースに関する例外をキャッチする。

catch (SQLException e)

{

// 例外オブジェクトからエラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

System.out.println("SQLSTATE : " + e.getSQLState());

System.out.println("ERROR CODE : " + e.getErrorCode());

e.printStackTrace();

}

// データベース以外のエラーが発生した場合の例外をキャッチする。

catch (Exception e)

{

// エラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

}

}

}