Java PostgreSQLに接続してみる

前に、WindowsにPostgres SQLをインストールしていたので、Javaで接続の練習をしたいと思います。

f:id:ts0818:20170709181832j:plain

コマンドプロンプトから、PostgreSQLにログインできたということは、パソコンにインストールされてたということでしょう。 

⇩  PosgreSQLのインストールなどは下記サイトへ

【Windows】PostgreSQL入門知識とインストール手順 | Tech2GO

 

Javaでのデータベース接続にはJDBCクラスとJDBCドライバが必要

JDBCJava DataBase Connectivity)と呼ばれるクラス群は標準で用意されているとのこと。ただ、JDBCドライバは、インストールする必要があります。

JDBCは、RDBMSの違いを吸収してくれるようです。 

PostgresSQLのJDBCドライバをインストー

https://jdbc.postgresql.org/ にアクセスし『Download』をクリックします。

f:id:ts0818:20170709183012j:plain

『If you are using Java 8 or newer then you should use the JDBC 4.2 version.』となっているので、『PostgreSQL JDBC 4.2 Driver, 42.1.1』を選択しました。

f:id:ts0818:20170709183008j:plain

ダウンロードしたファイルを、Eclipseで作った『Javaプロジェクト』の中に『lib』フォルダみたいなものを作って、そこに配置しましょう。

f:id:ts0818:20170709183658j:plain

ダウンロードしたJDBCドライバをあとから、参照することになるので、適当な場所に移動しておきましょう。

f:id:ts0818:20170709185420j:plain

作成した『Javaプロジェクト』を選択した状態で、「プロジェクト(P)」>「プロパティ(P)」を選択します。

f:id:ts0818:20170709184409j:plain

Javaビルド・パス」を選択し、「ライブラリー(L)」 の「外部JARの追加(X)...」でダウンロードしたJDBCドライバのjarファイルを指定します。

f:id:ts0818:20170709184315j:plain

移動しておいた、JDBCドライバを選択します。

f:id:ts0818:20170709195459j:plain

JDBCドライバのjarファイルが追加されるので、「OK」を選択します。

f:id:ts0818:20170709195455j:plain

参照ライブラリに追加されてればOKみたいです。

f:id:ts0818:20170709195452j:plain

 

PosgresSQLにデータベースとテーブル作成

コマンドプロンプトなどで、PostgreSQLにログインします。

psql -U postgres

データベースの作成は、 

CREATE DATABASE データベース名

作成できます。データベース一覧は、

¥l

f:id:ts0818:20170709200054j:plain

使用するデータベースを選択します。

¥ c データベース名

f:id:ts0818:20170709200719j:plain

テーブルの表示は、

¥dt;

テーブルの構造は、

¥d テーブル名;

f:id:ts0818:20170709201145j:plain

テーブル作成は、

CREATE TABLE orders(
  order_id int PRIMARY KEY,
  order_date date,
  client varchar(50),
  order_count int
);

でテーブルができます、たぶん。INSERT文でデータを何件か入れておきましょう。

f:id:ts0818:20170709203338j:plain

テーブルにデータが入っているか確認しましょう。

f:id:ts0818:20170709203903j:plain

 

Eclipse側で、JavaファイルからSQL接続

Eclipseで、作成したJavaプロジェクト内の、「src」>「パッケージ」の中で、「ファイル」>「新規」>「クラス」でmainメソッドを持ったクラスファイルを作成します。

f:id:ts0818:20170709212535j:plain

本当は、「パッケージ(K):」を作ってデフォルトパッケージを使わないようにするのが良いようです。「名前(M):」の入力と「どのメソッド・スタブを利用しますか?」で、「public static void main(String[] args)」にチェックして「完了(F)」をクリックします。

f:id:ts0818:20170709212532j:plain

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SelectSample {

  public static void main(String[] args) {
    // データベース接続情報を格納する変数
    Connection conn = null;

    // JDBCドライバの読み込み
    try {
      // postgresSQLのJDBCドライバを読みこみ
      Class.forName("org.postgresql.Driver");
    } catch(ClassNotFoundException e) {
      // JDBCドライバが見つからない場合
      e.printStackTrace();
    }

    try {
      // データベースへの接続
      conn = DriverManager.getConnection(
          "jdbc:postgresql:java_postgre", // データベース名
          "postgres",                     // ユーザー名
          "ts0818"                        // パスワード
        );

      // SELECT文の発行と結果の取得
      // Statement オブジェクトを生成
      Statement stmt = conn.createStatement();
      String sql = "SELECT * FROM orders";
      ResultSet rset = stmt.executeQuery(sql);
  
      // 結果の表示
      while(rset.next()) {
        System.out.println(rset.getString("client"));
      }
    } catch(SQLException e) {
      // 接続、SELECT文でエラーが発生した場合
      e.printStackTrace();
    } finally {
      // データベース接続の切断
      if(conn != null) {
        try {
          conn.close();
          conn = null;
        } catch(SQLException e) {
          // データベースの切断でエラーが発生した場合
          e.printStackTrace();
        }
      }
    }
  }

}

f:id:ts0818:20170709211847j:plain

PostgreSQLのデータベースにJavaファイルから接続してテーブルのデータの取得ができましたね。

次回は、トランザクションや、DAO(Data Access Object)とDTO(Data Transfer Object)や、JPAJava Persistence API)などに入っていきたいですね。