Javaトランザクションの簡単な使用
Javaの問題は、いくつかのインタビューで尋ねられます。
インタビュー中、最初に答える必要があるのは、取引がデータの完全性と一貫性を確保できることです。
スキルがより深い場合:いくつかの原則について話すだけです(タスクが開始される前にタスクを送信しないでください。すべてのタスクが完了したらタスクを送信します。
タスクが中央で切断された場合、ロールバックが実行され、以前のタスクがキャンセルされます)、簡単な例が与えられます(お金の節約と撤回の問題など。
たとえば、銀行は、1,000元のアカウントAからアカウントBに転送される2つのアカウント間でお金を譲渡します。システムは最初にアカウントAを1,000元を減らし、次に1,000元をアカウントBに追加します。すべての実行が成功した場合、データベースは一貫性があります。アカウントBの量を増やすことなくアカウントAの量のみが完了した場合、データベースは一貫性のない状態にあり、以前の操作をキャンセルする必要があります。 ))
この記事では、Javaトランザクションについて簡単に説明します。 Javaトランザクションについて尋ねるとき、これがデータベースに関連していることを知る必要があります。
1つ。最初に簡単なコードを見てみましょう
JDBCを使用して、トランザクション処理を実行します
public int delete(int sid){//データベース接続データベースコネクションdbc = new DatabaseConnection()を実装するクラス; //接続オブジェクト接続を取得con = dbc.getConnection(); try {con.setautocommit(false); // JDBCトランザクションdbc.executeupdateのデフォルトコミットメソッドを変更する( "id =" + sid); dbc.executeupdate( "xiao_contentからdelete where id =" + sid); dbc.executeupdate( "bylawid =" + sidからxiao_affixから削除); con.commit(); // commit jdbcトランザクションcon.setautocommit(true); // JDBCトランザクションdbc.close()のデフォルトコミットメソッドを復元します;返品1; } catch(exception exc){con.rollback(); // rolle back jdbcトランザクションdbc.close(); return -1; }}上記のコードは、Javaトランザクションの簡単な実行です。
上記の3回の削除操作が実行されます。失敗している限り、タスクはロールバックされます。これは、一緒に成功するか、何も行われないことに相当します。
トランザクション管理がない場合、以前の実行はすぐにデータベースで更新されます。
実行が失敗しても後続のタスクを終了し、データの一貫性を保証することはできません。
二。 Javaトランザクションの基本概念
原子性:トランザクションは完全な操作です。トランザクションの操作は分離不可能です(原子)。
それらを実行するか、それらを実行しません
一貫性:トランザクションが完了すると、データは一貫した状態でなければなりません。
分離:データを変更するすべての同時トランザクションは互いに分離されています。つまり、トランザクションは独立している必要があります。
他のトランザクションに依存したり、他のトランザクションに影響を与えたりするべきではありません(耐久性):トランザクションが完了した後、データベースの変更が永続的に維持され、トランザクションログはトランザクションの永続性を維持できます。
Javaトランザクション処理説明:データベースで複数の操作を実行する場合、各実行またはステップはトランザクションです。
データベースの操作が特定のステップで実行されないか、例外が発生し、トランザクションの障害が発生するため、一部のトランザクションが実行され、一部は実行されません。
これにより、トランザクションロールバックにつながり、以前の操作をキャンセルします...
データベース操作では、トランザクションとは、データベースを更新する1つ以上のSQLステートメントで構成される不可分な作業単位を指します。
トランザクション内のすべての操作が通常完了した場合にのみ、トランザクション全体をデータベースに提出できます。操作が完了していない場合、
トランザクション全体を取り消す必要があります。
たとえば、銀行振替取引では、Zhang Sanが彼のアカウントからLi Siのアカウントに1,000元移転すると仮定します。関連するSQLステートメントは次のとおりです。
アカウントを更新するお金をset money = monery-1000ここでname = 'Zhangsan'
アカウントを更新するお金を設定します= Monery+1000 where name = 'lisi'
これらの2つのステートメントは、完了したトランザクションとして処理する必要があります。このトランザクションは、両方が正常に実行された場合にのみ提出できます。
1つの文が失敗した場合、トランザクション全体を取り消す必要があります。
接続クラスでトランザクションを制御する3つの方法があります。
(1)SetAutoCommit(Boolean AutoCommit):トランザクションを自動的に送信するかどうかを設定します。
(2)commit();専念();取引をコミット。
(3)rollback();トランザクションを元に戻します。
JDBC APIでは、デフォルトのケースはトランザクションを自動的にコミットすることです。つまり、データベースの各更新はトランザクションを表します。
操作が成功した後、システムは自動的にcommit()を呼び出してコミットします。そうしないと、ロールバック()が呼び出されてトランザクションを元に戻します。
JDBC APIでは、SetAutoCommit(false)を呼び出すことにより、自動トランザクションの提出を禁止できます。
次に、データベースをトランザクションとして更新する複数のSQLステートメントを使用できます。すべての操作が完了した後、commit()が呼び出され、全体的な提出が行われます。
SQL操作のいずれかが失敗した場合、Commit()メソッドは実行されませんが、対応するsqlexceptionは生成されます。
現時点では、コードブロックで例外をキャッチし、ロールバック()メソッドを呼び出してトランザクションを元に戻すことができます。
一般的に、データベースの開発を専門とする開発者は、トランザクションを深く理解している必要があります。
しかし、平均的なプログラマーは、この点で多くの時間を費やす必要はありません。一般的な効果を理解するだけです。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!