|
| |
2002/11/19 田中宏和 |
| Last Update
2002/12/11 |
|
 |
JDBC(PostgreSQL)編 |
 |
◆JDBCとは? |
| JDBCとはJavaからデータベースにアクセスするためのAPIです。JDBCのAPIを使用してJavaのプログラムからデータベースにSQL文を発行してデータベースのデータの操作を行うことができます。 |
| ◆データベースとは? |
| データベースとはデータの集まりのことです。たくさんのデータを整理、分類して管理することによってユーザーが必要なデータを簡単に検索して取り出したり、またデータを追加、更新したりできるようになります。 |
| ◆PostgreSQLとは? |
| PostgreSQLは無料で使えるオープンソースのデータベースです。主にUNIXで使われている、高機能なRDBMS(リレーショナルデーターベース管理システム)です。数十万件のデータを実用的なスピードで扱うことができるので大規模な業務にも使用することができます。 |
| ◆ここでの環境 |
| OS |
Linux RedHat
7.3 |
| J2SE SDK |
1.4.0_03 |
| データベース |
PostgreSQL
(バージョン7.2.3) |
|
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にしてJava実行環境を構築してください。 |
| ◆PostgreSQLのダウンロードとインストール |
| ここではRPMファイルからインストールしたいと思います。 |
| ◆PostgreSQLがインストールされているか確認 |
| 最近のLinuxディストリビューションにはPostgreSQLが入っているので、以下のコマンドを実行してインストールされているか確認してみてください。 |
| Linux コンソール |
[root@redhat root]# rpm -aq|grep
postgresql
postgresql-7.2.1-5
postgresql-devel-7.2.1-5
postgresql-libs-7.2.1-5
postgresql-server-7.2.1-5
[root@redhat root]# |
|
| 上記のようにpostgresql-○.○.○-○という行があればインストールされているので、新たにインストールしなくてもいいですが、新しいバージョンにしたい場合はRPMをダウンロードしてインストールしてください。 |
| ◆PostgreSQLのRPMのダウンロード |
| インストールされていない場合、以下のサイトからPostgreSQLのRPMをダウンロードしてください。 |
| PostgreSQLのダウンロード → ftp://ftp6.jp.postgresql.org/postgresql/binary/ |
| ここでは以下の5つのファイルをダウンロードしました。 |
postgresql-7.2.3-1PGDG.i386.rpm
postgresql-devel-7.2.3-1PGDG.i386.rpm
postgresql-jdbc-7.2.3-1PGDG.i386.rpm
postgresql-libs-7.2.3-1PGDG.i386.rpm
postgresql-server-7.2.3-1PGDG.i386.rpm |
| ◆インストール |
| rpmコマンドでインストールします。インストールはroot権限で行ってください。 |
| Linux コンソール |
[root@redhat src]# rpm -Uhv postgresql-*.rpm
Preparing... ########################################### [100%]
1:postgresql-jdbc ########################################### [ 20%]
2:postgresql-libs ########################################### [ 40%]
3:postgresql ########################################### [ 60%]
4:postgresql-devel ########################################### [ 80%]
5:postgresql-server ########################################### [100%]
[root@redhat src]#
|
|
| これでインストールができました。 |
| ◆データーベースの起動 |
データベースを起動します。 # /etc/rc.d/init.d/postgresql start
というコマンドで起動できます。 root権限で行ってください。 |
| Linux コンソール |
[root@redhat src]# /etc/rc.d/init.d/postgresql start
Starting postgresql service: [ OK ]
[root@redhat src]# |
|
| ◆データーベースの作成 |
| ここからはpostgresユーザーで行います。 |
| Linux コンソール |
[root@redhat src]#
su - postgres
bash-2.05a$ |
|
データベースを作ってみましょう。ここでは「hellodb」という名前のデータベースを作成しました。 #
createdb -E EUC_JP データベース名
というコマンドで作成できます。このデータベースで使用するエンコーディングはEUC_JPに設定しています。 |
| Linux コンソール |
bash-2.05a$ createdb
-E EUC_JP hellodb
CREATE DATABASE
bash-2.05a$ |
|
| これでデータベースを作成できました。 |
| |
| ◆対話型PostgreSQLクライアントの起動 |
PostgreSQLには「psql」という対話型ツールが利用でいます。これを使用することによってデータベースに接続してSQL文を実行することができます。それでは実際にhellodbデータベースに接続してみましょう。
# psql データベース名
というコマンドで起動できます。 |
| Linux コンソール |
bash-2.05a$ psql hellodb
Welcome to psql, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
hellodb=#
|
|
| ◆テーブルの作成 |
| SQL文を実行してテーブルを作成してみることにします。以下がここで実行するSQL文です。 |
| テーブルを作成するSQL文 |
CREATE TABLE HELLO_WORLD_TABLE (
NO INTEGER NOT NULL,
LANGUAGE VARCHAR(50),
MESSAGE VARCHAR(100),
PRIMARY KEY(NO)
); |
|
| それではSQL文を入力してみましょう。Telnetで接続している場合は上のSQL文をコピーして貼り付けてもOKです。ここではTelnetソフトとしてTeratermを利用しました。「Alt+C」「Alt+V」で文字列のコピー、貼り付けができるので便利です。 |
| Linux コンソール |
hellodb=# CREATE TABLE HELLO_WORLD_TABLE (
hellodb(# NO INTEGER NOT NULL,
hellodb(# LANGUAGE VARCHAR(50),
hellodb(# MESSAGE VARCHAR(100),
hellodb(# PRIMARY KEY(NO)
hellodb(# );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'hello_world_tabl
e_pkey' for table 'hello_world_table'
CREATE
hellodb=# |
|
| これでテーブルが作成されました。ほんとに作成されているかテーブル一覧を表示していましょう。テーブル一覧を表示するには\dというコマンドでできます。 |
| Linux コンソール |
hellodb=# \d
List of relations
Name | Type | Owner
-------------------+-------+----------
hello_world_table | table | postgres
(1 row)
hellodb=# |
|
| できていますね。 |
| |
| ◆テーブルにデータの追加 |
| それではテーブルにデータを作ってみましょう。ここで作るデータは以下のようなデータです。 |
| NO |
LANGUAGE |
MESSAGE |
| 1 |
日本語 |
こんにちわ 世界 |
| 2 |
英語 |
Hello World |
|
| 上記のデータを追加するには以下のような2つのSQL文を実行します。 |
| テーブルにデータを追加するSQL文 |
INSERT INTO HELLO_WORLD_TABLE
VALUES ( 1 , '日本語' , 'こんにちわ 世界');
INSERT INTO HELLO_WORLD_TABLE
VALUES ( 2 , '英語' , 'Hello World');
|
|
| それではSQL文を入力してみましょう。Telnetで接続している場合は上のSQL文をコピーして貼り付けてもOKです。 |
| Linux コンソール |
hellodb=# INSERT INTO HELLO_WORLD_TABLE
hellodb-# VALUES ( 1 , '日本語' , 'こんにちわ 世界');
INSERT 16560 1
hellodb=#
hellodb=# INSERT INTO HELLO_WORLD_TABLE
hellodb-# VALUES ( 2 , '英語' , 'Hello World');
INSERT 16561 1
hellodb=# |
|
| 正常に追加されているか見てみることにしましょう。テーブルのデータを見るには以下のSQL文を実行します。 |
| テーブルのデータを表示するSQL文 |
SELECT * FROM HELLO_WORLD_TABLE; |
|
| それではSQL文を入力してみましょう。Telnetで接続している場合は上のSQL文をコピーして貼り付けてもOKです。 |
| Linux コンソール |
hellodb=# SELECT * FROM HELLO_WORLD_TABLE;
no | language | message
----+----------+------------------
1 | 日本語 | こんにちわ 世界
2 | 英語 | Hello World
(2 rows)
hellodb-# |
|
| データが正常に追加されていますね。これでここでの対話型ツールでの作業は一通り終わったので対話型ツールを終了させましょう。終了するには\qというコマンドを実行します。 |
| Linux コンソール |
hellodb-# \q
bash-2.05a$ |
|
| |
| ◆JDBCドライバのCLASSPATHへの追加 |
上でインストールしたpostgresql-jdbcにJDBCドライバが入っています。/usr/share/pgsql/の下のjdbc7.1-1.2.jarというファイルをCLASSPATHに設定してください。設定方法はアプリケーション編を参考にしてください。
設定する値 → /usr/share/pgsql/jdbc7.1-1.2.jar |
| ◆検索した結果を表示するコードの作成 |
| ■Javaソースコード |
JDBC(MySQL)編でMySQLに接続した場合との違いは
1.ドライバクラスの違い
2.データベースのURLの違い
だけです。 わかりやすいようにMySQLの場合のコードをコメントアウトして残してあります。 |
| HelloWorldJDBCPostgreSQL.java(ここからダウンロード) |
import java.sql.*;
public class HelloWorldJDBCPostgreSQL {
public static void main(String[] args) {
try {
// ドライバクラスをロード
// Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合
Class.forName("org.postgresql.Driver"); // PostgreSQLの場合
// データベースへ接続
// // MySQLの場合
// String url="jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS";
// Connection con=DriverManager.getConnection(url);
Connection con =
DriverManager.getConnection("jdbc:postgresql:hellodb",
"postgres",
""); // PostgreSQLの場合
// ステートメントオブジェクトを生成
Statement stmt = con.createStatement();
String sql = "SELECT * FROM HELLO_WORLD_TABLE";
// クエリーを実行して結果セットを取得
ResultSet rs = stmt.executeQuery(sql);
// 検索された行数分ループ
while(rs.next()){
// NOを取得
int no = rs.getInt("NO");
// 言語を取得
String lang = rs.getString("LANGUAGE");
// メッセージを取得
String msg = rs.getString("MESSAGE");
// 表示
System.out.println(no + " " + lang + " " + msg);
}
// データベースから切断
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| ■コンパイルと実行 |
| Linux コンソール |
[tanaka@redhat javahello]#
javac HelloWorldJDBCPostgreSQL.java
[tanaka@redhat javahello]# java HelloWorldJDBCPostgreSQL
1 日本語 こんにちわ 世界
2 英語 Hello World
[tanaka@redhat javahello]# |
|
| おおおおお!表示されましたね! |
| |
| ◆行の削除、更新、追加をするコードの作成 |
| 次に行の削除、更新、追加を行うコードを作成します。行の削除、更新、追加を行うにはStatementインターフェースのexecuteUpdateメソッドを使用します。executeUpdateメソッドの戻り値は削除、更新、追加した行数になります。また、検索の場合はexecuteQueryメソッドを使用します。 |
| HelloWorldJDBCPostgreSQLUpdate.java(ここからダウンロード) |
import java.sql.*;
public class HelloWorldJDBCPostgreSQLUpdate {
public static void main(String[] args) {
try {
// ドライバクラスをロード
Class.forName("org.postgresql.Driver");
// データベースへ接続
Connection con =
DriverManager.getConnection("jdbc:postgresql:hellodb",
"postgres",
"");
// ステートメントオブジェクトを生成
Statement stmt = con.createStatement();
// NOが3の行を削除するSQL文を作成します
String sql = "DELETE FROM HELLO_WORLD_TABLE " +
"WHERE HELLO_WORLD_TABLE.NO=3";
// クエリーを実行します
int result = stmt.executeUpdate(sql);
System.out.println(result + "行削除しました");
// NOが3の行を新しく追加するSQL文を作成します
sql = "INSERT INTO HELLO_WORLD_TABLE (NO,LANGUAGE,MESSAGE) " +
"VALUES(3 ,'ドイツ語','Hallo Welt')";
// クエリーを実行します
result = stmt.executeUpdate(sql);
System.out.println(result + "行追加しました");
// NOが1の行を新しい値で更新するSQL文を作成します
sql = "UPDATE HELLO_WORLD_TABLE "+
"SET LANGUAGE='スペイン語',MESSAGE='Hola Mundo' " +
"WHERE HELLO_WORLD_TABLE.NO=1";
// クエリーを実行します
result = stmt.executeUpdate(sql);
System.out.println(result + "行更新しました");
// 全ての行を検索するSQL文を作成
sql = "SELECT * FROM HELLO_WORLD_TABLE";
// クエリーを実行して結果セットを取得
ResultSet rs = stmt.executeQuery(sql);
// 検索された行数分ループ
while(rs.next()){
// NOを取得
int no = rs.getInt("NO");
// 言語を取得
String lang = rs.getString("LANGUAGE");
// メッセージを取得
String msg = rs.getString("MESSAGE");
// 表示
System.out.println(no + " " + lang + " " + msg);
}
// データベースから切断
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| |
| ■コンパイルと実行 |
| ソースコードの中で日本語を使用していてLinux上でコンパイルする場合は注意が必要です。ソースコードのエンコーディングがShift_JISで書かれている場合は-encodingオプションをつけてエンコーディングShift_JISを指定します。 |
| Linux コンソール |
[tanaka@redhat javahello]$ javac -encoding Shift_JIS HelloWorldJDBCPostgreSQLUpdate.java [tanaka@redhat javahello]$ java HelloWorldJDBCPostgreSQLUpdate 0行削除しました 1行追加しました 1行更新しました 2 英語 Hello World 3 ドイツ語 Hallo Welt 1 スペイン語 Hola Mundo [tanaka@redhat PostgreSQL]$ |
|
| おおおお!追加されて更新できましたね!もう一度実行するとNOが3の行が存在するため1行削除してから1行追加するようになります。 |
| Linux コンソール |
[tanaka@redhat javahello]$ java HelloWorldJDBCPostgreSQLUpdate 1行削除しました 1行追加しました 1行更新しました 2 英語 Hello World 3 ドイツ語 Hallo Welt 1 スペイン語 Hola Mundo [tanaka@redhat javahello]$ |
|
| おおお!削除してから追加できましたね! |
| |
| ◆PostgreSQLの停止方法 |
| PostgreSQLの停止は以下のコマンドでできます。root権限で行ってください。 |
| Linux コンソール |
[root@redhat javahello]# /etc/rc.d/init.d/postgresql stop
PostgreSQLサービスを停止中: [ OK ]
[root@redhat javahello]# |
|
| ◆PostgreSQLの自動起動の設定方法 |
| サーバー起動時にPostgreSQLを起動するように設定します。 |
| Linux コンソール |
[root@redhat root]# chkconfig --level 2345 postgresql on [root@redhat root]# |
|
■関連 JDBC(トランザクション)編
JDBC(データソース)編 JDBC編
JDBC(MySQL)編 プロパティファイル編 |
|
| |
|
|
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |