ResultSetMetaDataクラス


概要

ResultSetからgetMetaDataメソッドを使って得られるResultSetMetaDataクラスを使用すると、ResultSetに納められている スキーマの情報(列の名前、型など)を得ることができる。操作のたびにこれを参照してパフォーマンスを決めるようなシステムにしておけば 、DBが変更されたとしてもソースをいじる必要が少なくなり、また部品としての再利用も大きくできるようになる。
詳しくは http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/sql/ResultSetMetaData.html



jdbcCuiSample2.java


import java.sql.*;

 public class jdbcCuiSample2 {
     public static void main(String argv[]){
         String user = "DBユーザ名";
         String passwd = "パスワード";
         String url = "jdbc:postgresql://サーバ名/データベース名";
         Connection con = null;
         Statement stmt = null;
         ResultSet rs = null;

         try{
             //使用するドライバの読み込み
             Class.forName("org.postgresql.Driver");
             System.out.println("ドライバの読み込みが完了");
             //接続。getConnection()の中の書き方はドライバに依存する。
             con = DriverManager.getConnection(url,user,passwd);
             System.out.println("接続完了");

             //SQL文を実行するStatementの作成
             stmt = con.createStatement();

             //SELECT文の実行
             String sql = "SELECT * FROM t9935089_tbl1";
             rs = stmt.executeQuery(sql);

             //ResultSetMetaDataを使用してスキーマ情報を得る。
             ResultSetMetaData rsmd = rs.getMetaData();
             int numberOfColumns = rsmd.getColumnCount();

             System.out.println("列の推奨タイトル・識別名・SQL型・最大数");

             String[] ColumnLabel = new String[numberOfColumns];
             String[] ColumnName = new String[numberOfColumns];
             int[] ColumnType = new int[numberOfColumns];
             int[] ColumnDisplaySize = new int[numberOfColumns];

             for(int i = 1; i <=  numberOfColumns; i++){
                 ColumnLabel[i-1] = rsmd.getColumnLabel(i);
                 ColumnName[i-1] = rsmd.getColumnName(i);
                 ColumnType[i-1] = rsmd.getColumnType(i);
                 ColumnDisplaySize[i-1] = rsmd.getColumnDisplaySize(i);
                 System.out.println("列" + i + ":" + ColumnLabel[i-1] +" " 
                     + ColumnName[i-1] + " " + ColumnType[i-1] + " "
                     + ColumnDisplaySize[i-1] );
             }

             //ResultSetからデータの取り出し
             while(rs.next()){
                 for(int i = 1; i <= numberOfColumns; i++){

                     //ここでデータの型によって振舞をわけることができる。
                     //if(ColumnType[i] == Types.VARCHAR) { ... }といった具合に。

                     String value = rs.getString(i);
                     System.out.print(value + " | ");
                 }
                 System.out.println();
             }
         }catch(SQLException e){
             e.printStackTrace();
         }catch(Exception e){
             e.printStackTrace();
         }finally{
             try{
                 //切断。closeする。
                 if(rs != null) rs.close();
                 if(stmt != null) stmt.close();
                 if(con != null) con.close();
              }catch(Exception e){
                 e.printStackTrace();
              }
          }
     }
 }




実行結果


# java jdbcCuiSample2
ドライバの読み込みが完了
接続完了
列の推奨タイトル・識別名・SQL型・最大数
列1:button0 button0 12 8
列2:name0 name0 12 255
列3:textarea0 textarea0 12 65535
method | http://www.hogehoge.com | テストです。 | 
class | http://www.hogehoge2.com | またテストです。 | 

注: java.sql.Typesクラスでstatic final int VARCHAR = 12と定義されている。




←もどる