質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

796閲覧

トランザクション処理を実装すると更新できない

nyan_engineer

総合スコア30

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/06/13 13:16

#困ったこと
DaoクラスよりDB上のデータを更新しようと考えております。
トランザクション処理を組み込むと、DBに値が反映されません。
(処理を書き込まないと正常に更新されます)
ソースコードは以下となります。

public boolean deleteEmployeeInfo(EmployeeInfoDto employeeInfoDto) { CommonDao common = new CommonDao(); Connection conn = null; PreparedStatement pStmt = null; try { SqlConstants sqlConst = new SqlConstants(); conn = DriverManager.getConnection(sqlConst.DB_CONNECT_URI, sqlConst.USER_NAME, sqlConst.PASSWORD); pStmt = conn.prepareStatement(sqlConst.DELETE_EMPLOYEE_INFO); conn.setAutoCommit(false); pStmt.setString(1, employeeInfoDto.getEmployeeId()); conn.commit(); if (pStmt.executeUpdate() != 1) return false; } catch (SQLException e) { try { if (conn != null) { conn.rollback(); } } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); return false; } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }

処理の記述に間違いがあるのか、ご教授いただけますでしょうか。

バージョン:MySQL8.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

commitはexecuteの後だと思います。

投稿2019/06/13 13:27

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyan_engineer

2019/06/13 13:38

解決いたしました。。 処理の順番が違っていたのですね。 ありがとうございました。
m.ts10806

2019/06/13 13:41

はい。execute()は実行を「した」状態ではありますが、 トランザクション内ではあくまでメモリ上というかキャッシュ上というか 実際のDBへの反映が確定されない半端な状態にあります。 それを「確定」するのがコミットです。 役割をきちんとおさえることができれば間違いなく実装できると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問