質問編集履歴

2

追記の追記

2017/09/18 14:35

投稿

uer03108
uer03108

スコア194

test CHANGED
File without changes
test CHANGED
@@ -197,3 +197,95 @@
197
197
 
198
198
 
199
199
  ```
200
+
201
+
202
+
203
+ ――――――――――――――――――――――――――――――――――
204
+
205
+
206
+
207
+ 追記の追記
208
+
209
+
210
+
211
+ クラスを使用しない場合でも、動作しない場合がありました。これって、仕様なのでしょうか。
212
+
213
+
214
+
215
+
216
+
217
+ ```
218
+
219
+
220
+
221
+
222
+
223
+ String ip = "localhost";
224
+
225
+ String port = "3307";
226
+
227
+ String db = "sample";
228
+
229
+
230
+
231
+ String user = "****";
232
+
233
+ String pass = "****";
234
+
235
+
236
+
237
+
238
+
239
+ //接続
240
+
241
+ String url = "jdbc:mariadb://" + ip + ":" + port + "/" + db;
242
+
243
+ Connection con = DriverManager.getConnection(url, user, pass);
244
+
245
+ Statement stmt = con.createStatement();
246
+
247
+
248
+
249
+ // テーブル作成
250
+
251
+ stmt.execute("DROP TABLE IF EXISTS test");
252
+
253
+ stmt.execute("CREATE TABLE IF NOT EXISTS test (id int, name varchar(255))");
254
+
255
+ stmt.execute("INSERT INTO test (id, name) values (1, '日本語')");
256
+
257
+
258
+
259
+ //コミット/ロールバック
260
+
261
+ con.setAutoCommit(false);
262
+
263
+ stmt.execute("INSERT INTO test (id, name) values (2, '英語')");
264
+
265
+ stmt.execute("INSERT INTO test (id, name) values (2, '英語')");
266
+
267
+ //con.rollback(); //動作する
268
+
269
+ con.commit();
270
+
271
+
272
+
273
+ //コミット/ロールバック
274
+
275
+ con.setAutoCommit(false);
276
+
277
+ stmt.execute("CREATE TEMPORARY TABLE tblTmp AS SELECT DISTINCT * FROM test");
278
+
279
+ stmt.executeUpdate("DELETE FROM test");
280
+
281
+ stmt.executeUpdate("INSERT INTO test SELECT * FROM tblTmp");
282
+
283
+ stmt.execute("DROP TABLE tblTmp");
284
+
285
+ con.rollback(); //動作しない
286
+
287
+ //con.commit();
288
+
289
+
290
+
291
+ ```

1

追記

2017/09/18 14:35

投稿

uer03108
uer03108

スコア194

test CHANGED
File without changes
test CHANGED
@@ -153,3 +153,47 @@
153
153
 
154
154
 
155
155
  ```
156
+
157
+
158
+
159
+
160
+
161
+ ――――――――――――――――――――――――――――――――――
162
+
163
+ 追記
164
+
165
+
166
+
167
+ 回答有難うございました。
168
+
169
+ こちらの勘違いでした。insertではコミット・ロールバックともに動作致しました。
170
+
171
+ ですが、適当なテストテーブルを作成して、下記の様なクエリを実行すると必ずコミットになるようです。
172
+
173
+ 回答者様の仰られた通りです。
174
+
175
+
176
+
177
+ ```
178
+
179
+ //重複削除
180
+
181
+ sampleDb.setCommit();
182
+
183
+ sampleDb.execute("CREATE TEMPORARY TABLE tblTmp AS SELECT DISTINCT * FROM test");
184
+
185
+ sampleDb.executeUpdate("DELETE FROM test");
186
+
187
+ sampleDb.executeUpdate("INSERT INTO test SELECT * FROM tblTmp");
188
+
189
+ sampleDb.execute("DROP TABLE tblTmp");
190
+
191
+
192
+
193
+ sampleDb.commit();
194
+
195
+ //sampleDb.rollback();
196
+
197
+
198
+
199
+ ```