データベース接続6
[Webアプリケーション] データベース接続6
SQL データベース操作の学習でトランザクションを勉強しましたが、
今までのプログラムではデータ登録の際にコミットしていないのに、自動で登録されていたのに疑問を感じていたかもしれません。
Javaでも勿論トランザクションを利用できます。トランザクションはConnectionクラスのsetAutoCommitメソッドで実装できます。
自動コミットを無効化するfalseを引数に設定することで、一連のデータベースの更新処理をトランザクションで管理できます。
トランザクションを利用する場合は、明示的にcommitメソッドを記述してデータベースに変更を反映させる必要があります。
また、データベースの変更をキャンセルする場合はrollbackメソッドを記述します。
// トランザクション setAutoCommit(false); // コミット commit(); // ロールバック rollback();
最後に下記のトランザクションを利用したサンプルを参考に、ユーザー情報の更新・退会ができるマイページをイメージしたプログラムを作成してください。
どのようなプログラムにするかは完全に自由です。イメージした機能をプログラミングで実装する練習をしましょう。
サンプルプログラム
public static void main(String[] args) throws SQLException { try { // JDBCドライバーのロード Class.forName("com.mysql.cj.jdbc.Driver"); }catch(ClassNotFoundException e) { e.printStackTrace(); } // URL、ユーザー名、パスワードに値を設定 String url = "jdbc:mysql://localhost/データベース名" + "?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false"; String user = "ユーザー名"; String pw = "パスワード"; // コネクション Connection con = null; // プリペアードステートメント PreparedStatement st = null; try { // データベースへの接続 con = DriverManager.getConnection(url, user, pw); // トランザクションの開始 con.setAutoCommit(false); System.out.println("トランザクションの開始"); //------------------------------------------------- // ➀スケジュールテーブルの削除処理 //------------------------------------------------- String sql = "DELETE FROM sample1 WHERE user_id = ?"; st = con.prepareStatement(sql); // ユーザーIDを設定 st.setString(1, "xxxx"); // SQLを実行 int cnt = st.executeUpdate(); System.out.println("スケジュール:" + cnt + "件 削除"); // クローズ st.close(); //------------------------------------------------- // ➁ユーザーテーブルの削除処理 //------------------------------------------------- sql = "DELETE FROM sample2 WHERE user_id = ?"; st = con.prepareStatement(sql); // ユーザーIDを設定 st.setString(1, "xxxx"); // SQLの実行 cnt = st.executeUpdate(); System.out.println("ユーザー:" +cnt + "件 削除"); // クローズ st.close(); // コミット con.commit(); System.out.println("コミット"); }catch(SQLException e) { // ロールバック con.rollback(); System.out.println("ロールバック"); e.printStackTrace(); }finally{ // リソースの開放 if(con != null) { try { con.close(); }catch(SQLException e){ e.printStackTrace(); } } if(st != null) { try { st.close(); }catch(SQLException e){ e.printStackTrace(); } } }
さいたま市南区の武蔵浦和駅(中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、
個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。