今からはじめるプログラミング74(SQLを発行する・・・その2)
結果が見ずらいので、コネクション(DBへの接続)とかリザルトセット(結果)からメタデータ(データの補完データ?とか設定?)を取得して、結果に列名を加えてみました。
こうすると実行結果をより見やすくできます。
まぁ何ができるか確認するには、メタデータをSystemアウトしてしまうといいです。使える関数とかも確認できます。
修正したexecSQL
----------------------------------------------------------------------------------------
/**
* SQLを実行するメソッドを追加して、ポインタから実行できるようにした
* */
public void execSQL() {
final String URL = "jdbc:sqlite:E:\\resource\\sqlite_win\\test.db";
// final String USER = "";
// final String PASS = "";
final String SQL = "select * from area where id =? ;";
try (Connection conn = DriverManager.getConnection(URL);
PreparedStatement ps = conn.prepareStatement(SQL)) {
ps.setInt(1, 1);
try (ResultSet rs = ps.executeQuery()) {
///MetaDataから列名とかを取得する
ResultSetMetaData mDat = rs.getMetaData();
int colCnt = mDat.getColumnCount();
//列名をいれる配列
String[] names = new String[colCnt];
for(int i=0;i<colCnt ;i++){
//列名をmetadataから配列に入れて表示(System.out)
names[i] = mDat.getColumnName(i+1);
System.out.print(names[i] + " | ");
}
//見ずらいので改行
System.out.println( " ");
while (rs.next()) {
for(int i=0;i<colCnt ;i++){
System.out.print(rs.getString(names[i]) + " | ");
}
System.out.println( " ");
}
}
;
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("処理が完了しました");
}
}
------------------------------------------------------------------------------
SQLを現場で使う場合は、件数が多い場合など、ページングを行うことがほとんどですが、そのために実際のSQLの前に件数カウントのSQLを発行することが多いですね。
また、コスト(時間とか処理の重さ)を計測して、必要ならチューニングする必要もあります。データベーススペシャリストなんて資格もあるくらいですから、深い分野であるので、体制の充実したプロジェクトだったら、逐次相談して進めましょう。
ものによっては、プリントアウトするとA4数枚とかのSQLを書くこともあります。。。商用DBでストアドとかプロシジャなど多用したり、何をどこまで使用するか、たいていルールが決まっているので、確認する必要があります。
・・・というかよく見たらコネクションクローズしてないですねwwww