トッカンソフトウェア

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) 指定された列のテーブル名
※引数(int)の指定は 1~

ページのトップへ戻る