JDBCによるJavaデータベースプログラミング
JDBCドライバを入手する
JavaプログラムからJDBCを利用するには,JDBCドライバが必要となる.ドライバは,利用しているデータベースに付属していることが多い.
- Postgesの最新のJDBCを入手
クラスパスに配置
ドライバファイルはJavaのクラスパスに置きます.Netbeansでは以下のようにします.
- ドライバファイルを適切なフォルダに保存します.ここでいう適切なフォルダとは、各自の判断に任せることになります.たとえば、Netbeansで、現在作成しているプロジェクトのトップフォルダに置くというのも一つの手です.
- Netbeansプロジェクトのライブラリに登録します.Netbeans上で現在作成しているプロジェクトを右クリックし、プロパティを表示します.カテゴリの中にライブラリというのが存在しますので、それをクリック.右側に「jar/フォルダを追加」というボタンがあるので、それをクリックして、ドライバファイルを指定します.
以上の手順により、プログラム中でドライバファイルを参照することができるようになります.
データベースに接続する
接続の手順は,どんなデータベースであっても下記の手順を踏むことになる.
Class.forName("org.postgresql.Driver");//ドライバ名の指定
String url = "jdbc:postgresql://ホスト名:ポート番号/DB名";//データベース接続のURL設定";
Connection con = DriverManager.getConnection(url, user, password);
使用するデータベースによって,
- ドライバ名
- 接続のURL
の表現は変わってくるので,調べておきましょう.
PreparedStatmentクラスでSQLクエリーを投げる
JavaでRDBに接続し,SQLを投げかける典型的なコードを以下に示します.
#RDBへの接続方法については,省略しています.
まず,理解して欲しいのは,PreparedStatmentというクラスでSQLを設定しているところです.つまり,SQL文の中に直接変数を書き込む必要がなくなるので,SQLがすっきりとします.
検索結果は,ResultSetクラスに格納されていますから,そこから値を取り出せばOKです.
<データベースへの接続手続き(ここでは省略)>
String sql="SELECT * FROM テーブル名 WHERE id = ? and year =?";
PreparedStatement ps = dbcon.prepareStatement(sql);
ps.setString(1, "omnibus");
ps.setString(2, "master");
ResultSet rs = ps.executeQuery();
if(rs.next()){
//データがある場合の処理
String name = rs.getString("name");
}
//データが存在しない場合
else{
return false;
}
}catch(SQLException e){
System.out.println(e.getMessage() ) ;
return false;
}
ResultSetの扱い方
ResultSetクラスは検索結果を格納するクラスで,テーブルの形で結果のデータを管理していると考えてください.例えば,2件のデータが検索されたとしたら,2行のデータを持つということになります.列は,SELECT文でしていた数になります.
そして,データの扱いは1行単位で扱います(これが重要). つまり,先頭データから順番に線形でデータを取り出します.
ここで重要な概念が「カーソル」です.カーソルとは,現在の行を指し示すものです.next()メソッドを実行するたびに,カーソルは次の行のデータに移 動します.カーソルは,前後に移動できるようになっているのですが,現状としてそのようには実装されていません.JDBCのバージョンによって,前方向し かデータを進めないことがあります(このケースが意外と多い).よって,データ数を調べるメソッドなどが使えない場合がありますので,注意してください.
なお,最初のデータを取り出す(1行目のデータを取り出す)際には,必ずnext()メソッドを実行してから取り出してください.つまり,クエリー を実行して取り出した直後は,カーソルは1行目の前(0行目?)に位置していますので,最低1度はnext()メソッドを実行しなければならないので,こ の点を注意してください.