MacOSでのPostgreSQLを用いたJBDCの始め方

Posted on
Java PostgreSQL 環境構築

はじめに

JDBCを触る機会があったのですが、個人用の環境でも練習したいと思い、PostgreSQLを導入した際の手順です。基本的には備忘録です。

各種バージョン等

- macOS : 10.15.4
- JDK : 13.0.1
- PostgreSQL : 12.2
- JDBC Driver : 42.4.12
- ターミナル : bash

Homebrewを用いてPostgreSQLをインストール

上記の記事を参考にPostgreSQLをインストールします。 以下では、userとpasswordは

postgresql

として説明します。

PostgreSQL JDBC Driverをダウンロード

上記ページからJDBC Driverをダウンロードします。

JDBC Driver(jarファイル)の設置とCLASSPATHの設定

MacOSかつ、JDKのバージョンが8以下であれば、Java外部ライブラリ(jarファイル等)を

/Library/Java/Extensions

に設置するとクラスローダーがコンパイル時にJDBCのクラスファイルを探してくれます。 しかし、今回はJDK13を用いているためCLASSPATHを設定する必要があります。

1. JDBC Driverの設置

ダウンロードした

postgresql-42.2.12.jar

/Library/Java/Extensions

に設置します。

2. CLASSPATHの設定

コンパイル時にクラスローダーに反応させるために、環境変数CLASSPATHを設定します。 ターミナルを起動し、以下コマンドを実行します。

echo 'export CLASSPATH=.:/Library/Java/Extensions/postgresql-42.2.12.jar:$CLASSPATH' >> .bash_profile
source ~/.bash_profile

JDBCを用いたPostgreSQLへの接続テスト

最後に、テストテーブルの作成とデータベースへの接続及びデータの取得のデモを行います。

1. テスト用テーブルの作成

テストテーブル作成用SQLの作成

任意の場所に以下のファイルを作成します。 以下では~/Desktopに作成したものとします。

create table test(
    id serial primary key,
    name varchar(255),
    point real
);
insert into test(name,point) values
('foo', 41.2),
('bar',55.1),
('baz', 10.7),
('qux', 98.0),
('quux', 22.2),
('foobar', 35.6);

PostgreSQLの起動とデータベースの作成

ターミナルを起動し、以下コマンドを実行します。

brew services start postgresql
createdb test
psql test

テスト用テーブルの作成

PostgreSQLのコンソールが起動したら、以下コマンドを実行します。

\i ~/Desktop/createTestTable.sql
\q

2. JDBCからDBへの接続及びデータの取得

呼び出し用のJavaファイルの作成

任意の場所に以下のファイルを作成します。 以下では~/Desktopに作成したものとします。

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

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost/test";
        String user = "postgresql";
        String password = "postgresql";
        String sql = "select * from test";

        try(Connection con = DriverManager.getConnection(url, user, password)){
            try(PreparedStatement ps = con.prepareStatement(sql)){
                ResultSet rs = ps.executeQuery();
                while (rs.next()){
                    System.out.print(rs.getString("name"));
                    System.out.print(" gets ");
                    System.out.println(rs.getInt("point"));
                }
            } catch(SQLException e){
                e.printStackTrace();
            }
        } catch(SQLException e){
            e.printStackTrace();
        }
    }
}

Javaファイルのコンパイルと実行

cd ~/Desktop
javac Main.java
java Main

出力結果

foo gets 41.2
bar gets 55.1
baz gets 10.7
qux gets 98.0
quux gets 22.2
foobar gets 35.6

おわりに

初めてJDBCを用いてデータベースアクセスを行う方の手助けになればと思います。 誤り等あればご指摘頂けると幸いです。

参考文献