JavaからJDBCでPostgreSQLにアクセス(トランザクション、COMMIT、ROLLBACK)
今回は、トランザクション、コミット、ロールバックをやります。
package javaPosgre;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Posgre2 {
public static void main(String[] args) {
try {
connectionTest();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* コネクションの取得
*
* @throws Exception
* 実行時例外
*/
public static void connectionTest() throws Exception {
Connection conn = null;
try {
// クラスのロード
Class.forName("org.postgresql.Driver");
// コネクションの取得
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "ps");
// 自動コミットを解除する(トランザクション開始)
conn.setAutoCommit(false);
// INSERTのテスト
insertTest(conn);
System.out.println("connectionTest_OK");
// コミット
conn.commit();
} catch (Exception e) {
// ロールバック
conn.rollback();
System.out.println("connectionTest_NG");
throw e;
} finally {
if (conn != null) {
conn.close();
}
}
}
/**
* データ取得テスト
*
* @param conn
* コネクション
* @throws SQLException
* SQL例外
*/
public static void insertTest(Connection conn) throws SQLException {
Statement stmt = null;
try {
// ステートメントの作成
stmt = conn.createStatement();
// SQLの実行(updateもexecuteUpdateメソッドでいけます)
stmt.executeUpdate("insert into m_user(id,name) values('004','test user4');");
System.out.println("selectTest_OK");
} catch (Exception e) {
System.out.println("selectTest_NG");
throw e;
} finally {
if (stmt != null) {
stmt.close();
stmt = null;
}
}
}
}
トランザクションの開始はコネクションのsetAutoCommitメソッドで行います。
// 自動コミットを解除する(トランザクション開始)
conn.setAutoCommit(false);
コミットはコネクションのcommitメソッドで行います。
// コミット
conn.commit();
ロールバックはコネクションのrollbackメソッドで行います。
// ロールバック
conn.rollback();
setAutoCommit(false)を行った後に、SQLを実行しても最終定期にcommit()しなければ、データベースに反映されません。
ページのトップへ戻る