プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

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テーブルのレコードがコンソールに出力される