
Javaから、データベースに接続するには、JDBCを使うと説明させて頂きました。
JDBCプログラムの基本クラス
クラス | 説明 |
---|---|
DriverManager | JDBCドライバを管理するためのクラス、Connectionオブジェクトを取得する場合に使用します。 |
Connection | データベースとの「接続」を表すクラスになります。ここからStatementオブジェクトを取得します。 |
Statement | SQLを発行するためのインターフェイスです。 |
ResultSet | SELECT文を発行した際の、結果を表すクラスです。 |
SQLException | データベースに関するエラーを提供するクラスです。 |
JDBCプログラムの流れ
- Class.forName()メソッドにより、JDBCドライバをロードする。
- DriverManager.getConnection()メソッドにより、Connectionオブジェクトを取得する。
- Connection.createStatement()メソッドにより、Statementオブジェクトを取得する。
- SQL文を実行する。(更新系であれば、executeUpdate()メソッド、SELECT文であれば、executeQuery()メソッドになります。
- close()メソッドにてコネクションを閉じる。
Class.forName()メソッドについて
Oracleであれば、下記のように記述します。
Class.forName("oracle.jdbc.driver.OracleDriver");
このメソッドは、JDBCドライバのパッケージ付クラス名を指定して、JDBCドライバをロードさせるメソッドになります。
利用するRDBによってパッケージクラス名を変える必要がありますが、Oracleの場合は、「oracle.jdbc.driver.OracleDriver」と指定します。
実際の所
Class.forName()メソッドの呼び出しは、JVM実行中に1回だけ呼び出せばよく何度も実行する必要はありません。ただ、実際のプログラムでは何度も呼び出されることになります。
DriverManager.getConnection()メソッドについて
Oracleであれば、下記のように記述します。
//ホスト名 String hostname = "localhost"; //SID String sid = "orcl"; //ユーザー名 String username = "orauser"; //パスワード String passwd = "orapass"; Connection con = DriverManager.getConnection("jdbc:oracle:thin:@" + hostname + ":1521:" + sid,username,passwd);
引数 | 説明 |
---|---|
URL(jdbc:oracle:thin:@localhost:1521:orcl) | JDBCのURL(データベースの場所)を示します。 |
ユーザー名(orauser) | DB接続のユーザー名を示します。 |
パスワード(passwd) | DB接続のパスワードを示します。 |
Connection.createStatement()メソッド
Statement smt = con.createStatement();
上記のように記述すれば、Statementオブジェクトを取得することができます。
また、良く使われるのは、Statementインターフェイスではなく、そのサブインターフェイスであるより高機能な「PreparedStatement」でしょう。
下記の記事で、使い方は解説しています。
close()メソッドについて
データベースへの接続を明示的に切断します。データベースの呼び出しの際は、必ずこれをする必要があります。
smt.close(); con.close();
なお、ResultSetに関しては、Statementをcloseした際に、自動で解放されるので明示的な解放は必要ないです。(ただ、JDBCドライバによっては、Statementをclose()しても、ResultSetがcloseされないものもありましたので、その名残で、残っているシステムはある場合もあります。)
なぜ、明示的に切断をするのか?
Javaには、ガベージコレクションという機能でメモリを自動的に解放してくれるので、別に明示的に解放する必要はないのでは?と思われる方もいらっしゃるかもしれません。
通常のプログラムの場合であれば、大丈夫ですが、ファイルやDB等の外部リソースをリリースする場合は、明示的な解放が必要になります。
一回くらいのSQLを発行する単純なアプリなら問題ありませんが、Webアプリのように、プログラムが起動しっぱなしで、頻繁にSQLが発行されるシステムの場合は、パフォーマンスの低下や、悪くなるとハングアップや、停止を引き起こしかねないです。
この記事へのコメントはありません。