一覧表を出すような画面では、どんなSQLを投げても、取得される形(結果セット)、取得した結果を表示する形(画面)は、大体変わりません(; ・`д・´)
とくに業務系アプリケーションでは、ほとんど一緒似たような検索系の画面が良く登場しますw
その度にいくつも作るのは、いちいち馬鹿々々しいし、工数の無駄使いでやってられません勿体ないし、保守性が非常に下がります。
1つ画面を作って、あとは飾りとSQLぐらいでどうにかできるように、結果セットと一緒に、カラム名等をデータベースから取得したくなります。
こんなときは、カラム名等のメタ情報は、ResultSetMetaDataクラスを使って、SQL発行のついでに取得してしまいましょう♪
カラム名をメタデータから取得するサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class ResultMetaTest { public static void main(String[] args) { try { new ResultMetaTest().execute(); }catch(Exception e) { e.printStackTrace(); } } public void execute() throws Exception { Connection conn = null; Statement stmt = null; ResultSet rs = null; //おまじないw(ドライバのロード) Class.forName("oracle.jdbc.driver.OracleDriver"); //DBに接続 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "FACTORY", "FACTORY"); //SQLを発行 stmt = conn.createStatement(); rs = stmt.executeQuery("select dummy from dual"); ResultSetMetaData meta = rs.getMetaData(); System.out.println("カラム数:" + meta.getColumnCount()); System.out.println("1つ目のカラム名:" + meta.getColumnName(1)); //結果を取得 while(rs.next()) { System.out.println("結果:" + rs.getString("dummy")); } //後始末 rs.close(); stmt.close(); conn.close(); } } |
実行結果
1 2 3 | カラム数:1 1つ目のカラム名:DUMMY 結果:X |
サンプルの解説
データに関しては結果セット(ResultSet)から取得します。
これとは別に、テーブル、項目の情報等を取得したい場合は、ResultSetMetaDataから取得することができます。
たとえば、カラム名の取得は、ResultSetMetaData#getColumnName(int)にて、結果セットの項目名を取得することができます。