SpringJDBC を用いた JDBC プログラミング
このページでは,Eclipse を使って,Java 言語の JDBC プログラムを作る手順を, 見本となるプログラムと説明する. JDBC は,Java 言語でリレーショナルデータベースを操作するための手段として使う. この Web ページの要点は,素の JDBC よりも,SpringJDBC を使うほうが便利ということです.
- リレーショナルデータベースの1つのレコード(行)を,1つの Java オブジェクトに対応 させます.
⇒ そのために,CommodityDso という名前のクラスを定義します.
- Java プログラムの中に SQL プログラムを埋め込みます..
⇒ そのために,JDBC を使う.
- SQL プログラムの評価結果は,テーブルのレコード(行)の集まりになる.
これを,Java のリスト (List) などに変換したい.
⇒ SpringJDBC を使うと簡単です. SpringJDBC とは,JDBC 抽象化フレームワークの機能を持ったソフトウェアで,Spring 2 の構成要素になっています. このページでは,SpringJDBC の使い方に焦点を当てます.
* SpringJDBC にこだわる必然性はありません. 素の JDBC の機能だけでも,機能的に不足はありません
- SpringJDBC の機能を使う部分は,1つのクラスに集める
そのために,CommodityDao という名前のクラスを定義します. つまり,データベースの操作は,必ず CommodityDao を経由する.SpringJDBC の流儀に従って書くのは,CommodityDao クラスだけということになる.
ここに書いたプログラムは,PostgreSQLで 動く.ごく簡単な設定の変更でMySQLや Java DBや他のリレーショナルデータベースソフトウェアでも動く.
必要となるソフトウェア
- Windows での Java JDK 18 (Java SE Development Kit 18) のインストールが済んでいること。
C:\Program Files\Java\jdk1.6.0_11 のようなディレクトリがあれば,インストール済み。
- Eclipse のWebページの記述に従って,Eclipse のインストールが終わっていること.
- Eclipse の SpringIDE プラグイン がインストール済みであること
- Spring 2 インストールのWebページの記述に従って,Spring 2 のインストールを終えていること。
- リレーショナルデータベース・ソフトウェアのインストールが済んでいること.
インストールしていないときは,下記の Web ページを参考に,インストールを済ませておくこと.
あらかじめ決めておく事項と設定内容
Spring 2 インストールディレクトリを確認しておく。 このページでは,次のように書く。
- Spring 2 インストールディレクトリ: C:\Program Files\Java\spring-framework-2.5
設定内容について.この Web ページに掲載するプログラムは,下記の設定である. 設定が違う場合には,プログラムを書き換える(書き換えは難しくは無い).
- PostgreSQL の利用 を使う場合
データベース名と, PostgreSQL にログインするために使うデータベース・一般ユーザのアカウント(ユーザ名とパスワード)を決めておくこと. このページでは,次のように書く.
- データベース名: testdb
使用するデータベースの名前のことを,「データベース名」と呼ぶことにする. データベース名は,自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと, すでに存在するデータベースを使ってもいい(つまり,既存のデータベースのデータベース名を使う)し,新しいデータベースを作ることにしてもいいです.
- PostgreSQL にログインするために使うデータベース・一般ユーザのアカウント(ユーザ名とパスワード)
- ユーザ名: testuser
- パスワード: hoge$#34hoge5
データベース名 testdb の権限を持ったユーザにして下さい.(そうで無いとエラーが出ます).
この Web ページの手順を試すために,新しいデータベースと,新しい一般ユーザのアカウントを作りたいという場合は, phpPgAdmin などを使ってください.
psql のようなコマンドライン・クライアントを使う場合には,次のようになります(エンコーディングについて調べきっていません.まだ不完全です.参考情報ということでご理解下さい).
CREATE ROLE testuser LOGIN PASSWORD 'hoge$#34hoge5' NOINHERIT VALID UNTIL 'infinity'; CREATE DATABASE testdb WITH ENCODING='UTF8' OWNER=testuser;
パスワードは,説明を簡単にするために hoge$#34hoge5 と書いているが,実際には,これとは違うものを,必ず適切に設定してください.
PostgreSQL の利用 を使うために,次の設定を行うことになるので,確認しておく.
- JDBC ドライバ: org.postgresql.Driver (PostgreSQL に依存する値)
- PostgreSQL 用 JDBC の jar ファイル:c:\Program Files\psqlJDBC\postgresql-8.3-603.jdbc4.jar
PostgreSQL 用 JDBC の Java ファイルが存在するディレクトリ C:\Program Files\psqlJDBC を探すとすぐに見つかります.
- データベース名: testdb
- MySQL の利用 を使う場合
データベース名と,MySQL にログインするために使うデータベース・一般ユーザのアカウント(ユーザ名とパスワード)を, このページでは,次のように書く.
- データベース名: testdb
使用するデータベースの名前のことを,「データベース名」と呼ぶことにする. データベース名は,自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと, すでに存在するデータベースを使ってもいい(つまり,既存のデータベースのデータベース名を使う)し,新しいデータベースを作ることにしてもいいです.
- MySQL にログインするために使うデータベース・一般ユーザのアカウント(ユーザ名とパスワード)
- ユーザ名: testuser
- パスワード: hoge$#34hoge5
データベース名 testdb の権限を持ったユーザにして下さい.(そうで無いとエラーが出ます).
この Web ページの手順を試すために,新しいデータベースと,新しい一般ユーザのアカウントを作りたいという場合は, MySQL コマンドライン・クライアントの主な機能 や MySQL GUI Tools などを使い,次のコマンドを実行してください.
* それぞれのツールの操作法(起動法,ログインの方法など)は,MySQL コマンドライン・クライアントの主な機能 や MySQL GUI Tools の Web ページを見てください.
create database 'testdb' default character set cp932 collate cp932_japanese_ci; create user testuser identified by 'hoge$#34hoge5'; grant all on testdb.* to 'testuser';
パスワードは,説明を簡単にするために hoge$#34hoge5 と書いているが,実際には,これとは違うものを,必ず適切に設定してください.
MySQL の利用 を使うために,次の設定を行うことになるので,確認しておく.
- JDBC ドライバ: org.gjt.mm.mysql.Driver (MySQL に依存する値)
- MySQL 用 JDBC の jar ファイル名: C:\Program Files\Java\mysql-connector-java-5.1.6\mysql-connector-java-5.1.6-bin.jar
JDBC で MySQL を使うために必要になるので、 https://dev.mysql.com/downloads/connector/ から Connector/J をダウンロードして、解凍しておく(展開(解凍)するディレクトリは何でもよい。この資料では上記のディレクトリにあるものとして説明する)。
ダウンロードの手順は, 「MySQL コネクタ (Connector) Java のダウンロード」の Web ページで説明している.
- データベース名: testdb
-
Java DB を使う場合
次の設定を確認しておく.
- Java DB データベースディレクトリ(相対): dbdir
Java DB のデータベースファイルが置かれるディレクトリのことです. これは自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと, データベース名と Java DB データベースディレクトリとは別ものです.混同しないこと.
なお,Java DB データベースディレクトリは,「dbdir」 のように,相対パス形式で書く場合と,「C:\hoge\dbdir」のように,絶対パス形式で書く場合があります. 今回は,相対パス形式で書く.
- データベース・ロケーション: C:\Program Files\eclipse3.5\eclipse\dbdir
データベース・ロケーションとは, データベースファイルが置かれる実際のディレクトリのことです.
Java DB データベースディレクトリを,「dbdir」のような相対パス形式にする場合, データベース・ロケーションは,Eclipse インストールディレクトリである C:\Program Files\eclipse3.5\eclipse のサブディレクトリになる. (一方で,絶対パス形式の場合は,データベース・ロケーションは,Eclipse インストールディレクトリと無関係になります). このデータベース・ロケーションは, Eclipse インストールディレクトリと,Java DB データベースディレクトリ(相対)を連結したものになる.
- JDBC ドライバ: org.apache.derby.jdbc.EmbeddedDriver (Java DB に依存する値)
- Java DB 用 JDBC の jar ファイル:C:Program Files\eclipse3.5\eclipse\plugins\org.apache.derby.core_10.5.1\derby.jar
Java DB (Derby) インストールのときに,Eclipse プラグインもインストールしますが,その中に Java DB 用 JDBC の jar ファイルが含まれています.
- Java DB データベースディレクトリ(相対): dbdir
テスト用データベースの作成
テスト用データベースとして,下記の SQL コマンドで,テーブル commodity が作られ,データが入っていること.
create table commodity (
id integer primary key not null,
name varchar(32) not null,
price integer );
insert into commodity values( 1, 'apple', 50 );
insert into commodity values( 2, 'orange', 20 );
insert into commodity values( 3, 'strawberry', 100 );
insert into commodity values( 4, 'watermelon', 150 );
insert into commodity values( 5, 'melon', 200 );
insert into commodity values( 6, 'banana', 100 );
select * from commodity;
Eclipse での Spring JDBC プログラムの作成手順
以下,Eclipse を使う. プロジェクトの作成,クラスの定義と実行という一連の操作を,図解で説明する.
Eclipse の使用にあたって,事前に決めておく事項
Eclipse のプロジェクト等を作る. このページでは,プロジェクト名,パッケージ名は次のように記述します. (すでに同じ名前のプロジェクトがある,といったときは,プロジェクト名を変えてください).
- プロジェクト名: HelloWorld
- パッケージ名: hoge.hoge.com
プロジェクトの新規作成
下記の手順で,プロジェクトを新規に作成する.
- (もし,プロジェクト・エクスプローラが開いていなければ)プロジェクト・エクスプローラを開く
「ウインドウ (Window)」→「ビューの表示 (Show View)」→「プロジェクト・エクスプローラ (Project Explorer)」 と操作する.
- プロジェクトの新規作成の開始
「ファイル」→「新規 (New)」→「プロジェクト (Project)」
または,プロジェクト・エクスプローラ内で,右クリック→「新規 (New)」→「プロジェクト (Project)」 - 「Java」の展開
新規プロジェクトのウインドウが開くので, 「Java」を展開する.
- 「Java プロジェクト」の選択
展開した「Java」の下にある 「Java プロジェクト」を選び,「次へ」をクリック.
- プロジェクト名の指定
新規Javaプロジェクトのウインドウが開くので,プロジェクト名を付ける(1行目). プロジェクト名には好きにつけて良いが,全角文字は避ける.分かりやすい名前が良い.
- Java 設定
Java 設定はデフォルトのままでよい.「終了」をクリック
- パースペクティブ
もし,「関連付けられたパースペクティブを開きますか?」というウインドウが開いたら,パースペクティブを開きたいので,「はい」をクリック.
(Java DB (Derby) を使うときのみ) Apache Derby ネーチャーの追加と,サーバの開始
Java DB (Derby) を使うときに限り,プロジェクトへのApache Derby ネーチャーの追加 と,Java DB (Derby) サーバの開始を行う. これは, Java DB (Derby) を使うための追加的な設定です.
- プロジェクト・エクスプローラで,プロジェクト名 HelloWorld を右クリック.
- 「Apache Derby」→「Apache Derby ネーチャーの追加」
「Apache Derby」が候補として現れないときは, Java DB (Derby) インストール の手順に従って,インストールと設定を行う.
- 「Apache Derby」→「Derby ネットワーク・サーバの開始」
ポート1527 で Derby サーバが起動します.
「Derby ネットワーク・サーバの開始」が選べない状態になっているときは, すでに開始済みなので,この手順は不要.
リレーショナルデータベース・ソフトウェアとして,Java DB (Derby) 以外を使う場合は,上記は不要です.
プロジェクトへの Spring プロジェクト・ネーチャーの追加
今度は,Spring JDBC を使うための設定です.
プロジェクトへの Spring プロジェクト・ネーチャーの追加を,次の操作で行う.
- プロジェクト・エクスプローラで,プロジェクト名 HelloWorld を右クリック.
- 「Spring ツール (Spring Tools)」→「Spring プロジェクト・ネーチャーの追加」と操作.
「Spring ツール (Spring Tools)」が候補として現れないときは, Eclipse の SpringIDE プラグイン の手順に従って,インストールを行う.
- プロジェクトの下に,「Spring Elements」が増えるので確認しておく.
プロジェクト名 HelloWorld の左横の 「+」をクリックして展開すると, 「Spring Elements」が増えている. (Spring プロジェクト・ネーチャーの追加ができたことが分かる).
プロジェクトへの外部 jar ファイルの追加
次の2種類の jar ファイルを,プロジェクトに追加します.
- Spring 2 の jar ファイル
Spring 2 を Eclipse から使えるようにするために, Spring 2 の jar ファイルを,外部 jar として追加します. 追加すべき jar ファイルは,次の 2 つです.
C:\Program Files\Java\spring-framework-2.5\dist\spring.jar C:\Program Files\Java\spring-framework-2.5\lib\jakarta-commons\commons-logging.jar
- リレーショナルデータベースシステムに付属の JDBC の jar ファイル
JDBC を使いリレーショナルデータベース・ソフトウェアと接続できるようにするため,リレーショナルデータベース・ソフトウェアに付属の JDBC ファイルを,外部 jar として追加する必要がある. (JDBC ファイルは,使用するリレーショナルデータベース・ソフトウェアごとに違う,ということ).
外部 jar ファイルを,プロジェクトに追加する手順を下記に示す.
- プロジェクト・エクスプローラで,プロジェクト名 HelloWorld を右クリック.
- 「プロパティー」→「Java コンパイラー」→「Java のビルド・パス」→「ライブラリー」
- 「外部 JAR の追加」をクリック
- Spring 2 に関する次の 2 つの jar ファイルを外部 jar として追加
C:\Program Files\Java\spring-framework-2.5\dist\spring.jar C:\Program Files\Java\spring-framework-2.5\lib\jakarta-commons\commons-logging.jar
上記のファイルが現れないときは,Spring 2 インストール の手順に従ってインストールを行う.
- JDBC の jar ファイルを追加.
- PostgreSQL の場合:
C:\Program Files\psqlJDBC\postgresql-8.3-603.jdbc4.jar を追加する.
- MySQL の場合:
C:\Program Files\Java\mysql-connector-java-5.1.6\mysql-connector-java-5.1.6-bin.jar を追加する.
JDBC の jar ファイルが無い,というときは,MySQL Connector Java のダウンロードの Web ページを見てください.
- Java DB の場合:
C:Program Files\eclipse3.5\eclipse\plugins\org.apache.derby.core_10.5.1\derby.jar を追加する.
- PostgreSQL の場合:
- 外部 JAR の確認
外部 JAR システムを確認したいときは,プロジェクト・エクスプローラで,「Java リリース; src」の下の,「ライブラリー」を展開する.
パッケージ作成
Eclipse のプロジェクト・エクスプローラを使って, パッケージを作成します. パッケージ名には hoge.hoge.com のようなドメイン名を付ける習慣があることに注意してください. このページでは,作成するパッケージ名は,hoge.hoge.com と書く. (パッケージ名を変えるときは,読み替えてください).
- (もし,プロジェクト・エクスプローラが開いていなければ)プロジェクト・エクスプローラを開く
「ウインドウ」→「ビューの表示」→「プロジェクト・エクスプローラ」 と操作する.
パッケージの作成,クラスの作成などの作業は,プロジェクト・エクスプローラで行う.
- パッケージを新規作成すべきプロジェクトの選択
プロジェクト・エクスプローラに,プロジェクト一覧が表示されているはずです. パッケージを新規作成したいプロジェクト名 HelloWorld を右クリックして, 「新規」→「パッケージ」と操作する.
- パッケージ名の設定
名前のところに,パッケージ名 hoge.hoge.com を設定し,「終了」をクリックする.
- パッケージの確認
プロジェクト・エクスプローラにおいて, パッケージ hoge.hoge.com が増えていることを確認する.
クラス定義
Spring JDBC のサンプルプログラムとして,次の4つのクラスを定義します.
- CommodityDso
データ格納用クラス
テーブル Commodity の1タップル(行)を格納するためのオブジェクト
- CommodityDao
データ操作用クラス
テーブル Commodity に関わる操作(テーブル Commodity の1タップル,複数タップル等を出力する)
- DataSourceFactory
JDBC ドライバ名,データベース名などの定義
- HelloWorld
データ操作用クラス CommodityDao のメソッドを呼び出して結果を表示
クラス定義の手順は次の通りです. 前準備として,パッケージ hoge.hoge.com を作成済みであること.
- クラス定義の開始
プロジェクト・エクスプローラにおいて, クラスを定義したいパッケージ名 hoge.hoge.com を右クリック.その後, 「新規」→「クラス」と操作する.
* 「新規」を選んだとき,「クラス」が現れないことがあります. そのときは, 「新規」→「その他」→「Java」→「クラス」と操作する.
プロジェクト・エクスプローラで, パッケージ名 hoge.hoge.comが表示されていないときは, プロジェクト名の下の 「Java リソース; src」または「src」の下を展開して下さい.
- 定義すべきクラス名等の指定
Java パッケージ名,クラス名を入力できるウインドウが開くので,設定を行う.
- 「パッケージ (package)」(2行目の「パッケージのところ): パッケージ名 「hoge.hoge.com」を設定.(「hoge.hoge.com」になっていなければ修正すること).
- 「クラス名」(4行目の「名前」のところ): ここでは,HelloWorld と書いている.
- 「public static void main(String[] args)」: チェックする
- 上記の「クラスの新規作成」の操作を,4つのクラスについて繰り返す.
新規作成すべきクラスは,CommodityDso, CommodityDao, DataSourceFactory, HelloWorld の 4 つである.
- クラスファイル一覧の表示
プロジェクト・エクスプローラで, パッケージ名 hoge.hoge.com の左横の「+」をクリックすると, クラスファイル一覧が表示されます.
- 定義したいクラスのファイルを開く
Eclipse のプロジェクト・エクスプローラで,定義したいクラスの「クラス名.java」 をダブルクリックします. すると,エディタが開きます.
- エディタでクラス
CommodityDso,
CommodityDao,
DataSourceFactory,
HelloWorld を定義する.
下記のクラス定義をカットアンドペーストして使ってください. (パッケージ名を「hoge.hoge.com」と書いているので,パッケージ名を別の名前にしている場合には,適切に読み替えてください).
- ソースを保存
「ファイル」→「保管」または CTRL+S で保存される. 保存時にコンパイルされる
コンパイル時のエラーや警告があれば, Eclipse 内の問題・ビューに表示されるので確認する.
CommodityDso.java
テーブル Commodity の1タップル(行)を格納するためのオブジェクト
CommodityDso クラスを新規作成したら,下記のプログラムをカット&ペースト.
----------------------ここから--------------------
package hoge.hoge.com;
public class CommodityDso {
// リレーショナルデータベースの1つのレコード(行)を,1つの Java オブジェクトに対応させる
// Commodity テーブルのレコード(行)用に,CommodityDso という名前のクラスを定義する.
private Integer type;
private String name;
private Integer price;
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
----------------------ここまで----------------------
CommodityDao.java
テーブル Commodity に関わる操作(テーブル Commodity の1タップル,複数タップル等を出力する)
CommodityDao クラスを新規作成したら,下記のプログラムをカット&ペースト.
----------------------ここから--------------------
package hoge.hoge.com;
import java.sql.*;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
public class CommodityDao {
// 使用するテーブル名
final private static String TABLE = "Commodity";
// private で SimpleJdbcTemplate オブジェクトを定義して,他のメソッドで使う,というのが決まり文句(詳しくは Spring のマニュアル)
private SimpleJdbcTemplate jdbcTemplate;
public void setDataSource(org.springframework.jdbc.datasource.DriverManagerDataSource dataSource) {
this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
//
// 更新の例(1行挿入.値の更新)
//
public void insertTuple(int type, String name, int price) {
this.jdbcTemplate.update("insert into " + TABLE + " values ( " + type + ", '" + name + "', " + price + " )");
}
public void setName(int type, String name) {
this.jdbcTemplate.update("update " + TABLE + " set name = ? where type = ?", new Object[] {name, new Integer(type)});
}
//
// 問い合わせ
//
// タップル数
public int getCount() {
return this.jdbcTemplate.queryForInt("select count(*) from " + TABLE);
}
// 選択条件の無い4つの問い合わせ
// ■ 結果が,単純値のリスト
// type のリスト
public List<Map<String,Object>> getAllType() {
return this.jdbcTemplate.queryForList("select type from " + TABLE);
}
// name のリスト
public List<Map<String,Object>> getAllName() {
return this.jdbcTemplate.queryForList("select name from " + TABLE);
}
// price のリスト
public List<Map<String,Object>> getAllPrice() {
return this.jdbcTemplate.queryForList("select type from " + TABLE);
}
// ■ 結果が,タップルのリスト
public List<Map<String,Object>> getAllTuple() {
return this.jdbcTemplate.queryForList("select * from " + TABLE);
}
// ■ 結果が,CommodityDso オブジェクトのリスト (つまり,結果が Java の CommodityDso オブジェクトに格納されている)
public List<CommodityDso> getAllCommodity() {
return this.jdbcTemplate.query(
"select * from " + TABLE,
new org.springframework.jdbc.core.simple.ParameterizedRowMapper<CommodityDso>() {
public CommodityDso mapRow(ResultSet rs, int rowNum) throws SQLException {
CommodityDso c = new CommodityDso();
c.setType(rs.getInt("type"));
c.setName(rs.getString("name"));
c.setPrice(rs.getInt("price"));
return c;
}
});
}
// ■ 選択条件あり.price で選択したときのタップル数
public int getCountByPrice( int price ) {
return this.jdbcTemplate.queryForInt("select count(*) from " + TABLE + " where price = ?", price);
}
// 選択条件あり.type で選択して,CommodityDso オブジェクトを出力
// (type が主キーなので CommodityDso オブジェクトは1つになる)
public CommodityDso selectNameByType( int type ) {
return this.jdbcTemplate.queryForObject(
"select * from " + TABLE + " where type = ?",
new org.springframework.jdbc.core.simple.ParameterizedRowMapper<CommodityDso>() {
public CommodityDso mapRow(ResultSet rs, int rowNum) throws SQLException {
CommodityDso c = new CommodityDso();
c.setType(rs.getInt("type"));
c.setName(rs.getString("name"));
c.setPrice(rs.getInt("price"));
return c;
}
},
type );
}
}
----------------------ここまで----------------------
DataSourceFactory.java
JDBC ドライバ名,データベース名などの定義を行うクラスです. DataSourceFactory.java は,PostgreSQL 用になっているので,他のリレーショ ナルデータベースシステムを使うときは,先頭部分を書き換えることを忘れないこと.
Eclipse で DataSourceFactory クラスを新規作成したら,下記のプログラムをカット&ペースト.
JDBC プログラムで,データベースシステムと接続するとき, 新しいデータベースを作るには,「;create=true」を付ける.
----------------------ここから----------------------
package hoge.hoge.com;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class DataSourceFactory {
// 決まり文句 (ドライバクラス)
final private static String PostgresJDBCDriver = "org.postgresql.Driver";
final private static String MySQLJDBCDriver = "org.gjt.mm.mysql.Driver";
final private static String JavaDBJDBCDriver = "org.apache.derby.jdbc.EmbeddedDriver";
final private static String HiRDBDriver = "JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver";
// 下記の変数を正しく設定する
// DBNAME, DBDIR, USER, PASS, JDBCDriver, DBURL
// PostgreSQL 用デフォルト
// Eclipse で PostgreSQL を使いたいときは,次の手順で,WebContent\WEB-INF\lib にインポートしておく.
// WebContent\WEB-INF\lib を右クリック.「一般」→「ファイルシステム」
// その後インポートすべきファイルとして,次のファイルを指定
// C:\Program Files\psqlJDBC\postgresql-8.3-603.jdbc4.jar
final private static String DBNAME = "testdb"; // Database Name
final private static String USER = "testuser"; // user name for DB.
final private static String PASS = "hoge$#34hoge5"; // password for DB.
final private static String JDBCDriver = PostgresJDBCDriver;
final private static String DBURL = "jdbc:postgresql://localhost/" + DBNAME;
// MySQL 用デフォルト
// Eclipse で MySQL を使いたいときは,次の手順で,WebContent\WEB-INF\lib にインポートしておく.
// https://dev.mysql.com/downloads/connector/ から,Connector/J をダウンロード
// c:\Program Files\Java\mysql-connector-java-5.1.6\ に置く.
// WebContent\WEB-INF\lib を右クリック.「一般」→「ファイルシステム」
// その後インポートすべきファイルとして,次のファイルを指定
// c:\Program Files\Java\mysql-connector-java-5.1.6\mysql-connector-java-5.1.6-bin.jar を追加
// final private static String DBNAME = "testdb"; // Database Name
// final private static String USER = "testuser"; // user name for DB.
// final private static String PASS = "hoge$#34hoge5"; // password for DB.
// final private static String JDBCDriver = MySQLJDBCDriver;
// final private static String DBURL = "jdbc:mysql://localhost/" + DBNAME;
// JavaDB用デフォルト
// final private static String DBNAME = "dbdir;create=true"; // Java DB の場合は,Java DB データベースディレクトリ(相対)
// final private static String DBDIR = "C:\\Program Files\\eclipse3.5\\eclipse\\"; // データベースが存在するディレクトリ
// DTP, DBViewer などを使ってデータベースを生成した場合は Eclipse インストールディレクトリ
// ij などを使ってデータベースを生成した場合は,c:\\<ワークスペース>\\<プロジェクト名>
// final private static String USER = ""; // user name for DB. Java DB (Derby) の場合は空
// final private static String PASS = ""; // password for DB. Java DB (Derby) の場合は空
// final private static String JDBCDriver = JavaDBJDBCDriver;
// final private static String DBURL = "jdbc:derby:" + DBDIR + DBNAME;
// HiRDB用デフォルト
// Eclipse で HiRDB を使いたいときは,次の手順で,WebContent\WEB-INF\lib にインポートしておく.
// WebContent\WEB-INF\lib を右クリック.「一般」→「ファイルシステム」
// その後インポートすべきファイルとして,次のファイルを指定
// C:\win32app\hitachi\hirdb_s\CLIENT\UTL\pdjdbc.jar
// ユーザ名,パスワード: C:/windows/HiRDB.iniのPDUSER の値を調べておく
// final private static String USER = "ユーザ名"; // user name for HiRDB. see C:/windows/HiRDB.ini
// final private static String PASS = "パスワード"; // password for HiRDB. see C:/windows/HiRDB.ini
// final private static String JDBCDriver = HiRDBDriver;
// final private static String HiRDBServerName = "hitachi-664320D"; // HiRDB サーバのコンピュータ名
// final private static String DBURL = "jdbc:hitachi:PrdbDrive://DBID=22200,DBHOST=" + HiRDBServerName + ",ENCODELANG=MS932"; // 'DBID=22200' is in "conf\pdsys";
DriverManagerDataSource connect() {
org.springframework.jdbc.datasource.DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName((String)JDBCDriver);
dataSource.setUrl(DBURL);
dataSource.setUsername(USER);
dataSource.setPassword(PASS);
return dataSource;
}
}
----------------------ここまで----------------------
HelloWorld.java
データ操作用クラス CommodityDao のメソッドを呼び出して結果を表示
HelloWorld クラスを新規新規作成したら,下記のプログラムをカット&ペースト.
----------------------ここから--------------------
package hoge.hoge.com;
import java.sql.*;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class HelloWorld {
public static void main(String[] args) {
DataSourceFactory dataSourceFactory = new DataSourceFactory();
DriverManagerDataSource dataSource = dataSourceFactory.connect();
CommodityDao e = new CommodityDao();
e.setDataSource(dataSource);
// テーブル定義
// 「Commodity テーブルが無い」というようなエラーメッセージが出た場合の回避策として,
// 「e.doExecuteSample();」を1度実行して,テーブルを定義する.
// e.doExecuteSample();
// 問い合わせ実行
System.out.println(" getCount() = " + e.getCount() );
System.out.println(" getAllType() = " + e.getAllType() );
System.out.println(" getAllName() = " + e.getAllName() );
System.out.println(" getAllPrice() = " + e.getAllPrice() );
System.out.println(" getAllTuple() = " + e.getAllTuple() );
System.out.println(" getAllCommodity() = " + e.getAllCommodity() );
// 更新と問い合わせ実行
e.insertTuple(7, "No Name 1", 1000);
e.insertTuple(8, "No Name 2", 1010);
e.setName(7, "New Name 1");
System.out.println(" getCount() = " + e.getCount() );
System.out.println(" getAllName() = " + e.getAllName() );
System.out.println(" getAllType() = " + e.getAllType() );
System.out.println(" getAllName() = " + e.getAllName() );
System.out.println(" getAllPrice() = " + e.getAllPrice() );
System.out.println(" getAllTuple() = " + e.getAllTuple() );
System.out.println(" getAllCommodity() = " + e.getAllCommodity() );
System.out.println(" getCountByPrice() = " + e.getCountByPrice(100) );
// 問い合わせ結果を CommodityDsoに格納するもの
CommodityDso c = e.selectNameByType(1);
System.out.println(" selectNameByType(1) = " + c + ", type = " + c.getType() + ", name = " + c.getName() + ", price = " + c.getPrice());
}
}
----------------------ここまで----------------------
実行
- 実行したいクラスを選び,右クリック
プロジェクト・エクスプローラで,パッケージ名の下にクラスファイル一覧が出ているので,実行したいクラスの「クラス名.java」 (つまり,HelloWorld.java) を右クリック.
- 「実行」 → 「Javaアプリケーション (Java Application)」と操作
もしくはAlt+Shift+Xを押し,J を押すという操作でもよい.
- 実行結果は次のようになる.
2008/10/01 16:11:21 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName 情報: Loaded JDBC driver: org.postgresql.Driver getCount() = 6 getAllType() = [{type=1}, {type=2}, {type=3}, {type=4}, {type=5}, {type=6}] getAllName() = [{name=apple}, {name=orange}, {name=strawberry}, {name=watermelon}, {name=melon}, {name=banana}] getAllPrice() = [{type=1}, {type=2}, {type=3}, {type=4}, {type=5}, {type=6}] getAllTuple() = [{type=1, name=apple, price=50}, {type=2, name=orange, price=20}, {type=3, name=strawberry, price=100}, {type=4, name=watermelon, price=150}, {type=5, name=melon, price=200}, {type=6, name=banana, price=100}] getAllCommodity() = [hoge.hoge.com.CommodityDso@e48e1b, hoge.hoge.com.CommodityDso@12dacd1, hoge.hoge.com.CommodityDso@1ad086a, hoge.hoge.com.CommodityDso@10385c1, hoge.hoge.com.CommodityDso@42719c, hoge.hoge.com.CommodityDso@30c221] getCount() = 8 getAllName() = [{name=apple}, {name=orange}, {name=strawberry}, {name=watermelon}, {name=melon}, {name=banana}, {name=No Name 2}, {name=New Name 1}] getAllType() = [{type=1}, {type=2}, {type=3}, {type=4}, {type=5}, {type=6}, {type=8}, {type=7}] getAllName() = [{name=apple}, {name=orange}, {name=strawberry}, {name=watermelon}, {name=melon}, {name=banana}, {name=No Name 2}, {name=New Name 1}] getAllPrice() = [{type=1}, {type=2}, {type=3}, {type=4}, {type=5}, {type=6}, {type=8}, {type=7}] getAllTuple() = [{type=1, name=apple, price=50}, {type=2, name=orange, price=20}, {type=3, name=strawberry, price=100}, {type=4, name=watermelon, price=150}, {type=5, name=melon, price=200}, {type=6, name=banana, price=100}, {type=8, name=No Name 2, price=1010}, {type=7, name=New Name 1, price=1000}] getAllCommodity() = [hoge.hoge.com.CommodityDso@9931f5, hoge.hoge.com.CommodityDso@19ee1ac, hoge.hoge.com.CommodityDso@1f1fba0, hoge.hoge.com.CommodityDso@1befab0, hoge.hoge.com.CommodityDso@13c5982, hoge.hoge.com.CommodityDso@1186fab, hoge.hoge.com.CommodityDso@14b7453, hoge.hoge.com.CommodityDso@c21495] getCountByPrice() = 2 selectNameByType(1) = hoge.hoge.com.CommodityDso@a0dcd9, type = 1, name = apple, price = 50
プログラムは動作するが,データベースと接続できない場合, USER, PASS の行などを確かめる.
(参考)
Eclipse で データベースの中身を確認したいときは, Eclipse のデータツール・プラットホーム を使って,簡単にできる.