JavaでOracleにJDBC接続してinsert/update/deleteするサンプルです。
(確認環境:Java 8,Oracle Express Edition 11g,Windows 10,Eclipse 4.8)
目次
SQLのサンプル | insertのサンプル |
説明 | 接続情報 |
プレースホルダ | |
接続とtry-with-resources構文 | |
コミットモードの設定 | |
パラメータ(値)のセット | |
SQLの実行とコミットとロールバック | |
updateの場合 | |
deleteの場合 | |
ドライバ | Oracleのドライバを取得する |
insertのサンプル
OracleにJDBC接続してインサートを実行するサンプルです。
package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
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 =
"insert into employee (id,name,romaji) VALUES (?,?,?)";
try(Connection conn =
DriverManager.getConnection(URL, USER, PASS)){
conn.setAutoCommit(false);
try(PreparedStatement ps = conn.prepareStatement(SQL)){
ps.setInt(1, 1);
ps.setString(2,"竹田");
ps.setString(3,"takeda");
ps.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
System.out.println("rollback");
throw e;
}
} 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";
8~10行目は、オラクルへ接続する情報です。1521はポート番号でデフォルトの値です。XEはデータベース名です。
finalは再代入不可になります。
Java finalのサンプル(定数として使用/継承不可)
プレースホルダ
final String SQL =
"insert into employee (id,name,romaji) VALUES (?,?,?)";
12行目は、SQLのinsert文です。クエスチョンマーク(?)は、プレースホルダです。パラメータで値を設定します。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
place=場所、holder=入れものです。
プレースホルダは、バインド変数とも呼ばれます。
接続とtry-with-resources構文
try(Connection conn =
DriverManager.getConnection(URL, USER, PASS)){
14行目のtryの後に続くかっこ()はリソースを自動でクローズします。try-with-resources構文と呼ばれます。Java7で導入されました。
Java リソースを自動でクローズ(try-with-resources文)
15行目は、DriverManagerクラスのgetConnectionメソッドで接続しています。変数の型はConnectionインターフェースです。
以下はOracleのJava8のConnectionインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Connection.html
コミットモードの設定
conn.setAutoCommit(false);
17行目は、setAutoCommitメソッドで引数はfalseです。手動コミットするようにしています。デフォルトは自動コミットモードです。自動コミットモードは、SQLを実行する毎にコミットされます。
パラメータ(値)のセット
try(PreparedStatement ps = conn.prepareStatement(SQL)){
ps.setInt(1, 1);
ps.setString(2,"竹田");
ps.setString(3,"takeda");
19行目は、prepareStatementのインスタンスを生成しています。プリコンパイルされたSQL文を扱うオブジェクトです。引数に上記のSQLを指定しています。
Prepared=準備された、Statement=文です。
以下はOracleのJava8のPreparedStatementインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html
20~22行目は、プレースホルダに値をセットしています。1つめの引数はプレースホルダの位置です。2つめの引数は値です。
SQLの実行とコミットとロールバック
ps.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
System.out.println("rollback");
throw e;
}
24行目は、executeUpdateメソッドでSQLを実行しています。
SQLの処理が成功した場合、25行目のCommitメソッドで確定されます。
ここでエラーがあった場合は、25行目は実行されず、26行目のcatchに処理が移動し27行目のrollbackメソッドでデータをロールバックします。例えばinsert文を2つ発行したとして一つは成功しもう一つは失敗した場合、2つともデータ更新はしません。
updateの場合
= "update employee set name = ? ,romaji = ? where id = ?";
updeteを行う場合は、12行目のSQL文と20~22行目のパラメータの設定を修正します。
ps.setString(1, "竹田test2");
ps.setString(2,"takedatest2");
ps.setInt(3,1);
deleteの場合
= "delete from employee where id = ?";
deleteを行う場合も12行目のSQL文と20~22行目のパラメータの設定を修正します。
ps.setInt(1,1);
Oracleのドライバを取得する
1.Oracleのサイトにアクセスし、Oracle 11gのドライバのリンクをクリックします。
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
2.ojdbc6.jarをクリックしてダウンロードします。
ドライバをクラスパス(ビルドパス)に追加する
取得したドライバ(ojdbc6.jar)をクラスパスに追加します。
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法
クラスパスに追加するとEclipseでは以下のように表示されます。
関連の記事