| 2.JDBC API |
| (1) JDBC API の基本 |
//HelloWorldJDBCMySQL.java import java.sql.*; public class HelloWorldMySQLJDBC { public static void main(String[] args) { try { Class.forName("org.gjt.mm.mysql.Driver"); Connection con = DriverManager.getConnection ("jdbc:mysql:///hellodb"); Statement stmt = con.createStatement(); String sql = "SELECT * FROM hello_world_table "; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ int no = rs.getInt("NO"); String lang = rs.getString("LANGUAGE"); String msg = rs.getString("MESSAGE"); System.out.println(no + " " + lang + " " + msg); } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } |
java.sql は必須
*1 ドライバクラスのロード
*2 データベースに接続
*3 SQL ステートメント
オブジェクトの生成
*4 SQL 文の実行と結果取得
SQL 文の記述
(検索:テーブル、項目、条件)
*5 検索された行数分をループ
int 型の項目 NOを取得
文字型の項目 言語と
メッセージを取得
標準出力(表示)
*6 クローズ
SQL stmt をクローズ
データベースから切断
*7 Exception エラー
標準エラーストリーム
に出力
|
実行結果 C:\java_test>javac HelloWorldMySQLJDBC.java C:\java_test>java HelloWorldMySQLJDBC 1 日本語 こんにちわ 世界 2 英語 Hello World |
|
| ※MySQL テーブル 定義の内容 ==> hello_world_table | |
標準パッケージの import ( import java.sql.*; )
ドライバクラスを提供しているパッケージの import( import vender.package; )
*1 ドライバクラスをロード java.lang.Class.forName クラスを使って、これから利用するJDBCドライバを 登録します。登録されたドライバはメモリ上にロードされます。※MySQLは「org.gjt.mm.mysql.Driver」(クラスパス指定で参照可能)
Class.forName("ドライバクラス名");
または
DriverManager.registerDriver(new ドライバクラス名());
*2 データベースに接続 ・DB とのコネクション確立 DB への接続には Connection オブジェクトを使います。このとき、メソッド DriverManager.getConnection が利用できます。・url の指定 登録したドライバが、データソースを認識/接続確立できるように、データ ソースを識別する URL を指定します。URL の形式は、ドライバのベンダーが 提供していますので、それにしたがってください。 url jdbc:<subprotocol>:<subname> jdbc は プロトコルです subprotocol は ドライバ名またはデータベース接続機構の名前 subname は DB ※「jdbc:mysql:///DB名」は、MySQLの指定方法のURLであり、次の書式です。 mysql のJDBCドライバーはこのURより、該当サーバのMySQLインストール先 のdataフォルダーのdbnameを探し確立します。 jdbc:mysql://[hostname][:port]/[dbname] [?param1=value1][¶m2=value2]..... ・useridとpasswd の指定 データベースサーバの設定したuseridとpasswd を指定します。設定が 無ければ不要です。例では省略しました。 *3 SQL ステートメントオブジェクトの生成 ・DB を操作するための SQL 文を DB へ送るためにはに Statement オブジェクトを使用し、SQL 文の実行のためのコンテナの役目をします。
Connection con = DriverManager.getConnection("url","userid","passwd"); *4 SQL 文の実行 SQL 文を記述し、その結果を取得します。 ResultSet は、発行された SQL 文の実行結果を含む Java オブジェクトです。 これは指定されたデータ型で返され、Javaアプリケーション内で処理されます。
Statement stmt = con.createStatement(); ※SQL 文の検索式に条件をつける場合、次のように指定できます。 SELECT ... WHERE hello_world_table.NO =1 *5 検索された行数分をループ これらは、ResultSet オブジェクトのメソッドです。 next() カーソルを現在の位置の 1 行下に移動 getInt(Int columnIndex) 現在行のカラム値を int 型数値で取得 getString(String columnName) 現在行のカラム値を String 型文字列で取得 ※next()の戻り値は、新しい現在の行が有効な場合は true それ以上行がない 場合は false です。 ※検索式が1行限定でも、このような処理にします。ゼロ行の判断は、アプリケ ーション側でカウントをとる必要があります。 ※getXXX メソッドは、JDBC ドライバがデータを指定された Java タイプに変換し 適切な Java の値を返します。int,String 以外のタイプは、「G. class index」 のResultSet インタフェースのメソッドを参照してください。 ※SQL タイプから Java タイプへのマッピングについては、JDBC の使用を参照 してください。 *6 クローズ 自動的に終了するのを待たないで、必要がなくなったらできるだけ早く明示的 に、クローズし、資源を解放します。 Statement.close() で、全ての Statement を でクローズ Connection.close() で、全ての Connection をクローズ *7 Exception エラー Exception のキャッチ は必ず必要です。次のようにSQLException に限定する こともできます。
ResultSet rs = stmt.executeQuery("SQL 文");
try { // Connection // Statement // close } catch (SQLException ex) { while (ex != null) { System.out.println ("State: " + ex.getSQLState ()); System.out.println ("Msg : " + ex.getMessage ()); System.out.println ("Code : " + ex.getErrorCode ()); } catch (Exception e) { e.printStackTrace(); } }
| (2) データベース情報の取得 |
//InfJDBC.java
import java.sql.*;
public class InfJDBC {
public static void main(String[] args) {
try {
// ドライバクラスをロード
Class.forName("org.gjt.mm.mysql.Driver");
// データベースへ接続
Connection con =
DriverManager.getConnection("jdbc:mysql:///helloDB");
// DB情報の入手
DatabaseMetaData dbmd = con.getMetaData();
// DB情報の表示
System.out.println("URL : " + dbmd.getURL());
System.out.println("Driver : " + dbmd.getDriverName());
System.out.println("Version : " + dbmd.getDriverVersion());
System.out.println("Database : " +
dbmd.getDatabaseProductName());
System.out.println("Version : "
dbmd.getDatabaseProductVersion());
// データベースから切断
con.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
|
C:\java_test>java InfJDBC URL : jdbc:mysql:///helloDB Driver : Mark Matthews' MySQL Driver Version : 2.0.14 Database : MySQL Version : 3.23.49-nt C:\java_test> |
以上がJDBC API の基本操作とデータベースの情報の取得方法です。尚、SQL 文は 検索 (select) 以外の更新( update , insert , delete , commit 等)もありますので、ホームの「DB」を参照してください。