Java Oracleに接続してselectするサンプル

JavaのOracle11gに接続してselectするサンプルです。
(確認環境:Java 8,Oracle Express Edition 11g,Windows 10,Eclipse 4.8)

目次

SQLのサンプル 接続してselectを実行する
説明 接続情報
  プレースホルダ
  接続とtry-with-resources構文
  パラメータ(値)のセット
  SQLの実行とデータの取得
  例外をキャッチする
ドライバ Oracleのドライバを取得する

接続してselectを実行する

Oracleに接続してselectを実行するサンプルです。

package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test1 {
	public static void main(String[] args) {

		final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
		final String USER = "hr";
		final String PASS = "hr";
		final String SQL = "select * from employee where id =? and romaji=?";

		try (Connection conn = DriverManager.getConnection(URL,USER,PASS);
			PreparedStatement ps = conn.prepareStatement(SQL)){

			ps.setInt(1, 2);
			ps.setString(2, "tanaka");

            try(ResultSet rs = ps.executeQuery()){
                while (rs.next()) {
                    System.out.println(
                    	rs.getInt("id") + " " +
                    	rs.getString("name") + " " +
                        rs.getString("romaji"));
                }           
            }
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("処理が完了しました");
		}
	}
}

接続情報

		final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
		final String USER = "hr";
		final String PASS = "hr";

11~13行目は、オラクルへ接続する情報です。1521はポート番号でデフォルトの値です。XEはデータベース名です。
finalは再代入不可になります。
Java finalのサンプル(定数として使用/継承不可)

 

プレースホルダ

final String SQL = "select * from employee where id =? and romaji=?";

14行目は、SQLのselect文です。クエスチョンマーク(?)は、プレースホルダ(バインド変数)です。パラメータで値を設定します。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
固定文字列のSQLの部分がプリコンパイル(キャッシュ)されるので実行速度が上がります。
place=場所、holder=入れものです。
プレースホルダは、バインド変数とも呼ばれます。

 

接続とtry-with-resources構文

		try (Connection conn = DriverManager.getConnection(URL,USER,PASS);
			PreparedStatement ps = conn.prepareStatement(SQL)){

16行目のtryの後に続くかっこ()はリソースを自動でクローズします。try-with-resources構文と呼ばれます。Java7で導入されました。
Java リソースを自動でクローズ(try-with-resources文)
16行目は、DriverManagerクラスのgetConnectionメソッドで接続しています。変数の型はConnectionインターフェースです。
17行目のPreparedStatementは、プリコンパイル(キャッシュ)されたSQL文を扱うオブジェクトです。都度コンパイルするより早くなります。
Prepared=準備された、Statement=文です。

以下はOracleのJava8のConnectionインターフェースのprepareStatementメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Connection.html#prepareStatement-java.lang.String-

以下はOracleのJava8のPreparedStatementインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html

 

パラメータ(値)のセット

			ps.setInt(1, 2);
			ps.setString(2, "tanaka");

19,20行目は、プレースホルダに値をセットしています。
1つめの引数はプレースホルダの位置です。2つめの引数は値です。
このサンプルのDBでは、1つめの項目のデータ型はNUMBERなのでsetIntメソッドにし、2つめの項目のデータ型はVARCHAR2なのでsetStringメソッドにしています。

 

SQLの実行とデータの取得

            try(ResultSet rs = ps.executeQuery()){
                while (rs.next()) {
                    System.out.println(
                    	rs.getInt("id") + " " +
                    	rs.getString("name") + " " +
                        rs.getString("romaji"));
                }           
            }

22行目は、executeQueryメソッドでSQLを実行し、ResultSetインターフェースのデータ型の変数に取得した値をセットしています。
23行目は、while文で取得した全データ件数分が完了するまでループ処理を実行します。

以下はOracleのJava8のResultSetインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/ResultSet.html

 

例外をキャッチする

		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

30行目のcatchは上記コードでSQLExceptionのエラーが発生したときに処理が行われます。
SQLExceptionはクラスでeは変数です。
31行目は、printStackTraceでスタックトーレスを出力します。
Java printStackTraceとは
32行目は、SQLException以外のエラーが発生したときに処理が行われます。

 

Oracleのドライバを取得する

1.Oracleのサイトにアクセスし、Oracle 11gのドライバのリンクをクリックします。
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

 

2.ojdbc6.jarをクリックしてダウンロードします。

 

ドライバをクラスパス(ビルドパス)に追加する

取得したドライバ(ojdbc6.jar)をクラスパスに追加します。

クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法

クラスパスに追加するとEclipseでは以下のように表示されます。

関連の記事

Java Oracleでinsert/update/deleteするサンプル

△上に戻る