JavaでPostgreSQLにJDBC接続してselectするサンプルです。
(確認環境:Java 8,PostgreSQL 11.2,Eclipse 4.8,Windows10)
目次
SQLのサンプル | JDBC接続してselectを実行する |
説明 | 接続情報 |
プレースホルダ | |
接続とtry-with-resources構文 | |
パラメータ(値)のセット | |
SQLの実行とデータの取得 | |
例外をキャッチする | |
ドライバ | JDBCドライバを取得する |
環境 | 接続先のデータベースとテーブル |
JDBC接続してselectを実行する
PostgreSQLにJDBC接続してselectを実行するサンプルです。
package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Test1 {
public static void main(String[] args) {
final String URL
= "jdbc:postgresql://127.0.0.1:5432/testdb10";
final String USER = "postgres";
final String PASS = "test1";
final String SQL = "select * from employee where id =? and romaji=?;";
try(Connection conn =
DriverManager.getConnection(URL, USER, PASS);
PreparedStatement ps = conn.prepareStatement(SQL)){
ps.setInt(1, 2);
ps.setString(2,"tanaka");
try(ResultSet rs = ps.executeQuery()){
while (rs.next()) {
System.out.println(
rs.getInt("id") + " " +
rs.getString("name") + " " +
rs.getString("romaji"));
}
};
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("処理が完了しました");
}
}
}
接続情報
final String URL
= "jdbc:postgresql://127.0.0.1:5432/testdb10";
final String USER = "postgres";
final String PASS = "test1";
11~14行目は、PostgreSQLへ接続する情報です。5432はポート番号です。testdb10はデータベース名です。
finalは再代入不可になります。
Java finalのサンプル(定数として使用/継承不可)
プレースホルダ
final String SQL = "select * from employee where id =? and romaji=?;";
15行目は、SQLのselect文です。クエスチョンマーク(?)は、プレースホルダです。パラメータで値を設定します。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
place=場所、holder=入れものです。
プレースホルダは、バインド変数とも呼ばれます。
接続とtry-with-resources構文
try(Connection conn =
DriverManager.getConnection(URL, USER, PASS);
PreparedStatement ps = conn.prepareStatement(SQL)){
17行目のtryの後に続くかっこ()はリソースを自動でクローズします。try-with-resources構文と呼ばれます。Java7で導入されました。
Java リソースを自動でクローズ(try-with-resources文)
18行目は、DriverManagerクラスのgetConnectionメソッドで接続しています。変数の型はConnectionインターフェースです。
19行目は、prepareStatementのインスタンスを生成しています。プリコンパイルされたSQL文を扱うオブジェクトです。引数に上記のSQLを指定しています。
Prepared=準備された、Statement=文です。
以下はOracleのJava8のConnectionインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Connection.html
以下はOracleのJava8のPreparedStatementインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html
パラメータ(値)のセット
ps.setInt(1, 2);
ps.setString(2,"tanaka");
21,22行目は、プレースホルダに値をセットしています。
1つめの引数はプレースホルダの位置です。2つめの引数は値です。
このサンプルのDBでは、1つめの項目のデータ型はintなのでsetIntメソッドにし、2つめの項目のデータ型はvarcharなのでsetStringメソッドにしています。
SQLの実行とデータの取得
try(ResultSet rs = ps.executeQuery()){
while (rs.next()) {
System.out.println(
rs.getInt("id") + " " +
rs.getString("name") + " " +
rs.getString("romaji"));
}
};
24行目は、executeQueryメソッドでSQLを実行し、ResultSetインターフェースのデータ型の変数に取得した値をセットしています。
25行目は、while文で取得した全データ件数分が完了するまでループ処理を実行します。
以下はOracleのJava8のResultSetインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/ResultSet.html
例外をキャッチする
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
32行目のcatchは上記コードでSQLExceptionのエラーが発生したときに処理が行われます。
SQLExceptionはクラスでeは変数です。
33行目は、printStackTraceでスタックトーレスを出力します。
Java printStackTraceとは
34行目は、SQLException以外のエラーが発生したときに処理が行われます。
JDBCドライバを取得する
1.PostgreSQLのJDBC ドライバを取得します。
以下のPostgreSQLのサイトにアクセスします。
https://jdbc.postgresql.org/download.html
2.JDBCの4.2バージョンのリンクをクリックするとダウンロードが始まります。
postgresql-42.2.5.jarを取得しました。任意の位置に配置します。
JDBCドライバをクラスパス(ビルドパス)に追加する
JDBCドライバ(postgresql-42.2.5.jar)をクラスパスに追加します。
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法
接続先のデータベースとテーブル
PostgreSQLのインストール方法と、データベースとテーブルを作成する方法は以下を参照願います。
PostgreSQLをインストールする手順(Windows)
PostgreSQL pgAdmin 4の使い方(起動からデータ参照)
関連の記事