JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > JDBC(PostgreSQL)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  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