teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

追記の追記

2017/09/18 14:35

投稿

uer03108
uer03108

スコア194

title CHANGED
File without changes
body CHANGED
@@ -97,4 +97,50 @@
97
97
  sampleDb.commit();
98
98
  //sampleDb.rollback();
99
99
 
100
+ ```
101
+
102
+ ――――――――――――――――――――――――――――――――――
103
+
104
+ 追記の追記
105
+
106
+ クラスを使用しない場合でも、動作しない場合がありました。これって、仕様なのでしょうか。
107
+
108
+
109
+ ```
110
+
111
+
112
+ String ip = "localhost";
113
+ String port = "3307";
114
+ String db = "sample";
115
+
116
+ String user = "****";
117
+ String pass = "****";
118
+
119
+
120
+ //接続
121
+ String url = "jdbc:mariadb://" + ip + ":" + port + "/" + db;
122
+ Connection con = DriverManager.getConnection(url, user, pass);
123
+ Statement stmt = con.createStatement();
124
+
125
+ // テーブル作成
126
+ stmt.execute("DROP TABLE IF EXISTS test");
127
+ stmt.execute("CREATE TABLE IF NOT EXISTS test (id int, name varchar(255))");
128
+ stmt.execute("INSERT INTO test (id, name) values (1, '日本語')");
129
+
130
+ //コミット/ロールバック
131
+ con.setAutoCommit(false);
132
+ stmt.execute("INSERT INTO test (id, name) values (2, '英語')");
133
+ stmt.execute("INSERT INTO test (id, name) values (2, '英語')");
134
+ //con.rollback(); //動作する
135
+ con.commit();
136
+
137
+ //コミット/ロールバック
138
+ con.setAutoCommit(false);
139
+ stmt.execute("CREATE TEMPORARY TABLE tblTmp AS SELECT DISTINCT * FROM test");
140
+ stmt.executeUpdate("DELETE FROM test");
141
+ stmt.executeUpdate("INSERT INTO test SELECT * FROM tblTmp");
142
+ stmt.execute("DROP TABLE tblTmp");
143
+ con.rollback(); //動作しない
144
+ //con.commit();
145
+
100
146
  ```

1

追記

2017/09/18 14:35

投稿

uer03108
uer03108

スコア194

title CHANGED
File without changes
body CHANGED
@@ -75,4 +75,26 @@
75
75
  }
76
76
  }
77
77
 
78
+ ```
79
+
80
+
81
+ ――――――――――――――――――――――――――――――――――
82
+ 追記
83
+
84
+ 回答有難うございました。
85
+ こちらの勘違いでした。insertではコミット・ロールバックともに動作致しました。
86
+ ですが、適当なテストテーブルを作成して、下記の様なクエリを実行すると必ずコミットになるようです。
87
+ 回答者様の仰られた通りです。
88
+
89
+ ```
90
+ //重複削除
91
+ sampleDb.setCommit();
92
+ sampleDb.execute("CREATE TEMPORARY TABLE tblTmp AS SELECT DISTINCT * FROM test");
93
+ sampleDb.executeUpdate("DELETE FROM test");
94
+ sampleDb.executeUpdate("INSERT INTO test SELECT * FROM tblTmp");
95
+ sampleDb.execute("DROP TABLE tblTmp");
96
+
97
+ sampleDb.commit();
98
+ //sampleDb.rollback();
99
+
78
100
  ```