JDBCを使ってPostgreSQLにアクセス
2015-07-05 - tomoTakaの日記で作成したテーブル「Address」をJDBCを使ってSELECTしてみました。
JavaのプロジェクトはNetBeansを使ってMavenプロジェクトとして作成。
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4-1201-jdbc41</version> </dependency>
- とりあえずGeometry型のPOINTを取得
private void test1() { try (Connection conn = DriverManager.getConnection("jdbc:postgresql:tomo", "tomo", "");) { String sql = "select POINT(geo_point) from address limit ?;"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, 1); System.out.println(String.format("*** SQL:%s ***", stmt.toString())); try (ResultSet rs = stmt.executeQuery();) { while (rs.next()) { String val1 = rs.getString(1); System.out.println(String.format("POINT:%s", val1)); } } } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } }
- 実行結果(POINTの値、経度、緯度が取得できました)
- Customized Typeを使っての実装
参考にしたのはここUsing Customized Type Mappings (The Java™ Tutorials > JDBC(TM) Database Access > JDBC Basics)です
以下の実装では、conn.getTypeMap()の結果がnullになっていました。(汗)、、、
private void test2() { try (Connection conn = DriverManager.getConnection("jdbc:postgresql:tomo", "tomo", "");) { System.out.println(conn); Map<String, Class<?>> map = conn.getTypeMap(); System.out.println("***map:" + map); // <---ここでmapがnullになっていることを確認 map.put("GeoPoint", Class.forName("com.mycompany.postgre.sample.GeoPoint")); String sql = "select POINT(geo_point) from address limit ?;"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, 1); System.out.println(String.format("*** SQL:%s ***", stmt.toString())); try (ResultSet rs = stmt.executeQuery();) { while (rs.next()) { GeoPoint object = (GeoPoint) rs.getObject("GeoPoint"); System.out.println(String.format("lat:", object.lat)); System.out.println(String.format("lng:", object.lng)); } } } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } }
とりあえずここまでをアップしました。tomoTaka01/postgre-sample - Java - GitHub
PostgreSQlでは、ほかの方法があるようです、、、
ここPostgreSQL: Documentation: 7.1: PostgreSQL Extensions to the JDBC APIを参考にまた挑戦します!