JavaからJDBCでPostgreSQLにアクセス(JSONB)
今回はJavaからJDBCでJSONBの項目にアクセスします。テーブルは前回に作成したものを使います。PostgreSQLでJSON操作についても前回を参照して下さい。
package javaPosgre;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonbTest {
public static void main(String[] args) throws SQLException {
Connection conn = null;
try {
// クラスのロード
Class.forName("org.postgresql.Driver");
// コネクションの取得
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "ps");
// INSERTのテスト
insertTest(conn);
// UPDATEのテスト
updateTest(conn);
// SELECTのテスト
selectTest(conn);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
}
}
}
/**
* データ追加テスト
*
* @param conn コネクション
* @throws Exception
* @throws SQLException SQL例外
*/
private static void insertTest(Connection conn) throws Exception {
PreparedStatement ps = null;
try {
ps = conn.prepareStatement("INSERT INTO tbl(value) VALUES ( ?::json)");
// 条件セット(1~)
ps.setString(1, "{\"aaa\":\"bbb\",\"ccc\":\"ddd\"}");
// SELECTを実行する
ps.executeUpdate();
System.out.println("insertTest_OK");
} catch (Exception e) {
System.out.println("insertTest_NG");
throw e;
} finally {
if (ps != null) {
ps.close();
ps = null;
}
}
}
/**
* データ更新テスト
*
* @param conn コネクション
* @throws SQLException SQL例外
*/
private static void updateTest(Connection conn) throws SQLException {
PreparedStatement ps = null;
try {
ps = conn.prepareStatement("UPDATE tbl SET value = value || ?::JSONB WHERE value @> ?::JSONB");
// 条件セット(1~)
ps.setString(1, "{\"eee\":\"fff\",\"ccc\":\"DDD\"}");
ps.setString(2, "{\"aaa\":\"bbb\"}");
// SELECTを実行する
ps.executeUpdate();
System.out.println("updateTest_OK");
} catch (Exception e) {
System.out.println("updateTest_NG");
throw e;
} finally {
if (ps != null) {
ps.close();
ps = null;
}
}
}
/**
* データ取得テスト
*
* @param conn コネクション
* @throws SQLException SQL例外
*/
public static void selectTest(Connection conn) throws SQLException {
ResultSet rs = null;
PreparedStatement ps = null;
try {
// ステートメントの作成
ps = conn.prepareStatement("select value from tbl where value @> ?::JSONB");
// 条件セット(1~)
ps.setString(1, "{\"aaa\":\"bbb\"}");
// SELECTを実行する
rs = ps.executeQuery();
// 結果の表示
while (rs.next()) {
// データ取得(項目指定)
System.out.println(rs.getString("value"));
}
System.out.println("selectTest_OK");
} catch (Exception e) {
System.out.println("selectTest_NG");
throw e;
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
}
}
}
追加したデータを更新し、その結果を抽出しています。 追加後 | {"aaa":"bbb","ccc":"ddd"} |
更新後 | {"aaa":"bbb","ccc":"DDD","eee":"fff",} |
::JSONB はJSONB型にキャストしています。これがないとエラーになります。
抽出条件はJSONB特有のものを使ってます。詳細は前回を参照して下さい。
上記以外は通常のJDBCの処理と同様になります。
ページのトップへ戻る