トッカンソフトウェア

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()しなければ、データベースに反映されません。


ページのトップへ戻る