JavaからJDBCでPostgreSQLにアクセス(SELECT)
前章でコネクションを取得するところをやったので、今回はコネクションを使ってデータを取得します。
package javaPosgre;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class Posgre1 {
public static void main(String[] args) {
try {
connectionTest();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* コネクションの取得
*
* @throws Exception
* 実行時例外
*/
public static void connectionTest() throws Exception {
Connection conn = null;
try {
// クラスのロード
Class.forName("org.postgresql.Driver");
// コネクションの取得
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "ps");
// SELECTのテスト
selectTest(conn);
System.out.println("connectionTest_OK");
} catch (Exception e) {
System.out.println("connectionTest_NG");
throw e;
} finally {
if (conn != null) {
conn.close();
}
}
}
/**
* データ取得
*
* @param conn
* コネクション
* @throws SQLException
* SQL例外
*/
public static void selectTest(Connection conn) throws SQLException {
Statement stmt = null;
ResultSet rs = null;
// 項目名を格納する配列
ArrayList<String> clmnAry = null;
try {
// ステートメントの作成
stmt = conn.createStatement();
// SQLの実行
rs = stmt.executeQuery("select * from m_user");
// 結果の表示
while (rs.next()) {
// 初回のみ項目名を取得
if (clmnAry == null) {
clmnAry = new ArrayList<>();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 0; i < columnCount; i++) {
System.out.println(metaData.getColumnName(i + 1));
clmnAry.add(metaData.getColumnName(i + 1));
}
}
// データ取得(全項目)
for (String clmn : clmnAry) {
System.out.println(rs.getObject(clmn));
}
// データ取得(項目指定)
System.out.println(rs.getString("id"));
// データ取得(位置指定:1~)
System.out.println(rs.getString(1));
}
System.out.println("selectTest_OK");
} catch (Exception e) {
System.out.println("selectTest_NG");
throw e;
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
}
}
}
コネクションを取得するところは前回にやったので、省略します。
SELECTを実行するにはまずコネクションからステートメントを作成します。
// ステートメントの作成
stmt = conn.createStatement();
次にSQLを発行します。
// SQLの実行
rs = stmt.executeQuery("select * from m_user");
サンプルでは単純なSQLを作成しましたが、実際はテーブルを結合したり、条件を加えたりします。
// キーのセット
String key = "0001";
// SQLの組み立て
StringBuffer stb = new StringBuffer();
stb.append("select name from m_user ");
stb.append("where id = '");
stb.append(key);
stb.append("'");
// SQLの実行
rs = stmt.executeQuery(stb.toString());
SQLを発行したらに結果を受け取ります。 取得する項目は項目名でも項目の位置でも指定出来ます。
// 結果の表示
while (rs.next()) {
// データ取得(項目指定)
String strId = rs.getString("id");
// データ取得(位置指定:1~)
String strId2 = rs.getString(1);
}
サンプルではgetStringを使いましたが、それ以外にも色々用意されています。 getBigDecimal、getBoolean、getDate、getDouble、getFloat、getInt、getLong、getObject、
getShort、getString、getTime、getTimestamp、など。(他にもあり)
項目名はレコードセットからメタデータを取得して、メタデータから取得出来ます。
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 0; i < columnCount; i++) {
// 項目名
System.out.println(metaData.getColumnName(i + 1));
}
ResultSetMetaDataを取得することにより項目名以外にも色々取れます(以下のその一部です)。 メソッド | 取得するもの |
---|---|
getColumnName(int) | 指定された列の名前 |
getColumnClassName(int) | 指定された列のJavaクラス |
getColumnTypeName(int) | 指定された列のSQL型 |
getTableName(int) | 指定された列のテーブル名 |
ページのトップへ戻る