Java で PostgreSQL(RDBMS)に接続するためのプロジェクトを作成していきます。また、JDBC の記事で使う、共通的なクラスを作成します(手順3 以降)。
手順1. プロジェクトの作成
db-access
というディレクトリを作成して、その配下に src/main/java
ディレクトリを作成します。
db-access/ - pom.xml - src/ - main/ - java/
手順2. pom.xml の作成
Maven でビルドできるように、以下の pom.xml
を作成します。
db-access/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.domain</groupId> <artifactId>db-access</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.1.4</version> </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> </project>
dependencies
に PostgreSQL の JDBC ドライバを追加してます。
手順3. 共通クラスの作成
JDBC でコネクションを取得するための共通クラスを作成します。メソッドを1つ用意して、java.sql.Connection
を返すようにしています。
db-access/src/main/java/jdbc/base/Driver.java
package jdbc.base; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Driver { public static Connection connect() throws ClassNotFoundException, SQLException { Class.forName("org.postgresql.Driver"); return DriverManager.getConnection( "jdbc:postgresql://localhost/test", // url "neko", "cat" // user, password ); } }
SQL(select, update, etc)を実行するときに Connection
が必要になるので共通化させています。
接続情報は以下の通りになります。
- データベース名:
test
- ログインユーザ:
neko
- パスワード:
cat
文字列 jdbc:postgresql....
で、ローカルの test
データベースに接続するようにしています。内容は、PostgreSQL のマニュアル に従っています。
手順4. 動作確認
手順4.1. 動作確認クラスの作成
Connection
を取得して、簡単な SQL を実行するクラスを作成します。
db-access/src/main/java/jdbc/base/ConnectMain.java
package jdbc.base; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ConnectMain { public static void main(String[] args) throws ClassNotFoundException, SQLException { try (Connection con = Driver.connect()) { //-> 現在日時を取得するSQLを準備 PreparedStatement ps = con.prepareStatement( "select current_timestamp" ); //-> SQLを実行してデータを取得 ResultSet rs = ps.executeQuery(); //-> データのカーソルを1つ進める rs.next(); //-> データを表示 System.out.print("NOW "); System.out.println(rs.getTimestamp("now")); //-> 後処理 rs.close(); ps.close(); } } }
try節(try (Cooection con = ....
)は、 Connection
を使い終わったらクローズするために書いています。try-with-resources文というみたいで、詳細は以下のリンク先に書かれています。
処理内容は、DB の現在日時(タイムスタンプ)を select して表示しています。SQL を実行すると、PostgreSQL が now
という列を返すので、それを rs.getTimestamp("now")
で取得しています。
手順4.2. 動作確認クラスの実行
事前に PostgreSQL を起動して、データベースとユーザを作成しておきます。作成方法は記事「DB環境の準備」に書いていますので、必要に応じて参照して頂けると嬉しいです。
それから上の ConnectMain
クラスを実行すると、以下のように表示されます。
NOW 2017-11-03 10:28:14.25525