EclipseのJDBC設定方法(Oracle編)
■Eclipseでオラクルのデータベースに接続する方法を解説する
※基礎学習の為、O/Rマッパーは使用しない
【前提条件】
・Oracleアカウントを取得していること
アカウントページはこちら→oracle.com
・OracleのJDBCドライバーがダウンロード済みであること
ダウンロード方法はこちら→Oracle12のJDBCドライバーダウンロード方法
・tnsnames.oraファイルにPDB名が記述されていること ※OCI接続の場合
記述例はこちら→「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。」の解決方法
※「②tnsnames.oraファイルにPDB名が記述されていることを確認」の欄を参照
・データベースに下記のテーブルを作成しておくこと
CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(20));
INSERT INTO TEST VALUES (1, '田中');
INSERT INTO TEST VALUES (2, '中山');
SELECT * FROM TEST;
ID NAME
-- ----
1 田中
2 中山
【設定手順】
①プロジェクトのビルドパスにJDBCドライバー(JARファイル)を追加する
サーブレットクラス等、動的プロジェクトの場合はWEB-INF/lib直下に配置すれば良い
②データベース接続のポイントとなる構文
・JDBCドライバーの読み込み
Class.forName("oracle.jdbc.driver.OracleDriver");
・データベース接続
①OCI接続の場合:Oracleクライアントのライブラリを利用して接続する方式(Oracleクライアントのインストールとtnsnames.oraへの記述が必要)
conn = DriverManager.getConnection("jdbc:oracle:oci:ユーザー名/パスワード@ネットサービス名");
②Thin接続の場合:Javaのライブラリのみを利用して直接Oracleに接続する方式
conn = DriverManager.getConnection("jdbc:oracle:thin:ユーザー名/パスワード@//ホスト名:ポート/プラガブルDB名");
・事前にデータベースに作成したTESTテーブルに対してSELECT文を準備
String sql = "SELECT ID, NAME FROM TEST";
・DBにSELECT文を送信する為にPreparedStatementインスタンスに格納
PreparedStatement ps = conn.prepareStatement(sql);
・SELECT文の結果をResultSetインスタンスに格納
ResultSet rs = ps.executeQuery();
・レコードが存在する間はループ処理でSELECT文で取得したカラムを取り出し、コンソールに出力
while (rs.next()) {
String id = rs.getString("ID");
String name = rs.getString("NAME");
System.out.println("No." + id + " 名前:" + name);
}
③記述例
※ソースをシンプルにする為に今回はmain()メソッドを持つJavaクラスに記述
package main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainJDBC {
public static void main(String[] args) {
Connection conn = null;
try {
//JDBCドライバー読み込み
Class.forName("oracle.jdbc.driver.OracleDriver");
//下記の何れかでデータベース接続(ユーザー名:DBUSER パスワード:0000 ネットサービス名:orclpdb プラガブルDB名:orclpdbの場合)
//OCI接続の場合
conn = DriverManager.getConnection("jdbc:oracle:oci:DBUSER/0000@orclpdb");
//Thin接続の場合
conn = DriverManager.getConnection("jdbc:oracle:thin:DBUSER/0000@//localhost:1521/orclpdb");
//事前にデータベースに作成したTESTテーブルに対してSELECT文を準備
String sql = "SELECT ID, NAME FROM TEST";
//DBにSELECT文を送信する為にPreparedStatementインスタンスに格納
PreparedStatement ps = conn.prepareStatement(sql);
//SELECT文の結果をResultSetインスタンスに格納
ResultSet rs = ps.executeQuery();
//レコードが存在する間はループ処理でSELECT文で取得したカラムを取り出し、コンソールに出力
while (rs.next()) {
String id = rs.getString("ID");
String name = rs.getString("NAME");
System.out.println("No." + id + " 名前:" + name);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
//データベースが接続されている場合
if (conn != null) {
try {
//接続を切断
conn.close();
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
}
Main.javaを実行すると下記のとおり、TESTテーブルのレコードがコンソールに出力される