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

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

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

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

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

Q&A

解決済

3回答

6230閲覧

トランザクション内で一部Rollbackしたい

yamaguchi79

総合スコア87

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

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

0グッド

0クリップ

投稿2014/08/26 04:23

JDBCで経由で、トランザクション内で一部Rollback後
コミットするといったことがおこりうるような仕様で
プログラムを書いています。
どうすれば良いでしょうか?分かる方、教えてください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

SavePointを使ったらどうでしょうか。

トランザクション内で、一時的なポイントを作れます。
たしか、JDBC3.0以降で使えるはずです。
むろん、JDBC4.0(JDK6以降)は、SavePointをサポートしています
(SavePointが使えるDBに限りますが、主要なDBは使えます)。

コードで書くと以下の様になります。

lang

1// AutoCommit Off 2conn.setAutoCommit(false); 3 4// データ追加した後、 5// SavePointの定義 6Savepoint sp = conn.setSavepoint(); 7 8// さらにデータを追加した後 9 10// spまで戻す 11conn.rollback(sp); 12conn.commit();

投稿2014/08/27 00:53

bonchan

総合スコア204

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

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

yamaguchi79

2014/08/29 00:43

皆さん回答ありがとうございました!挑戦してみようと思います!
guest

0

一部Rollbackを行う可能性のある部分はメモリ上で操作し、最終的にDBに書き込むよう設計したほうがよいでしょう。

投稿2014/08/27 00:15

sho_cs

総合スコア3541

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

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

0

JDBCで使うようなデータベースシステムでは、1つのトランザクションは「全か無か」で、一部でも失敗すればトランザクション全体をロールバックするというのが絶対ルールです(ACID原則のA:Atomicity、不可分性)。

ある操作で、一部だけコミットしたいというのであれば、そこだけ別のトランザクションへ切り出す以外に手段はありません。

投稿2014/08/26 04:46

maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問