1. What is a Java transaction?
The usual concept is that transactions are related to the database. A transaction is a sequence of operations to access the database. The database application system completes access to the database through transaction sets. The correct execution of transactions causes the database to transition from one state to another.
Transactions must comply with the ACID principles established by ISO/IEC.
ACID is the abbreviation for atomicity, consistency, isolation and durability. Transactions must comply with the ACID principles established by ISO/IEC. ACID is the abbreviation for atomicity, consistency, isolation and durability.
a. Atomicity
means indivisibility. Either all transactions are executed or none are executed. If all sub-transactions of the transaction are submitted successfully, all database operations are submitted and the database state is converted; if any sub-transaction fails, the database operations of other sub-transactions are rolled back, that is, the database returns to the state before the transaction was executed. No state transition occurs.
b. Consistency
The execution of a transaction converts the database from one correct state to another correct state.
c, Isolation
Before the transaction is correctly committed, any changes to the data by the transaction are not allowed to be provided to any other transaction, that is, before the transaction is correctly committed, its possible results are not Should be shown to any other transaction.
d. Durability
After a transaction is submitted correctly, its results will be permanently stored in the database. Even if there are other failures after the transaction is submitted, the processing results of the transaction will be saved.
Since the concept of transaction comes from the database, what is a Java transaction? What's the connection?
In fact, if a Java application system operates a database, it is implemented through JDBC. Then addition, modification, and deletion are all implemented indirectly through corresponding methods, and the control of transactions is also transferred to the Java program code accordingly. Therefore, database operation transactions are customarily called Java transactions.
2. Why transactions are needed
A simple sentence: maintain data consistency.
3. Java transaction types
There are three types of Java transactions: JDBC transactions, JTA (Java Transaction API) transactions, and container transactions. Here is the simplest introduction. Finally, we will introduce the use of jdbc transactions. You can search and learn the other two types by yourself.
a. JDBC transactions
JDBC transactions are controlled using Connection objects. The JDBC Connection interface (java.sql.Connection) provides two transaction modes: automatic submission and manual submission. java.sql.Connection provides the following methods to control transactions:
public void setAutoCommit(boolean) public boolean getAutoCommit() public void commit() public void rollback()
When using JDBC transaction demarcation, you can combine multiple SQL statements into a single transaction. One disadvantage of JDBC transactions is that the scope of the transaction is limited to one database connection. A JDBC transaction cannot span multiple databases.
b. JTA (Java Transaction API) transaction
JTA is a high-level, implementation-independent, and protocol-independent API. Applications and application servers can use JTA to access transactions. .
JTA allows applications to perform distributed transactions - access and update data on two or more network computer resources, which can be distributed across multiple databases. The JDBC driver's JTA support greatly enhances data access capabilities.
If you plan to use JTA to define transactions, you will need a JDBC driver that implements the javax.sql.XADataSource, javax.sql.XAConnection, and javax.sql.XAResource interfaces.
A driver that implements these interfaces will be able to participate in JTA transactions. A XADataSource object is a factory for XAConnection objects. XAConnections are JDBC connections that participate in JTA transactions, and you will need to set up the XADataSource using the application server's administration tools.
J2EE applications use JNDI to query data sources. Once the application finds the data source object, it calls javax.sql.DataSource.getConnection() to obtain a connection to the database.
XA connections are different from non-XA connections. It is important to remember that XA connections participate in JTA transactions. This means that XA connections do not support JDBC's autocommit feature. At the same time, applications must not call java.sql.Connection.commit() or java.sql.Connection.rollback() on XA connections.
Instead, applications should use UserTransaction.begin(), UserTransaction.commit(), and serTransaction.rollback().?
c. Container transactions
Container transactions are mainly provided by the J2EE application server. Most container transactions are completed based on JTA. This is a fairly complex API implementation based on JNDI. Compared with coding to implement JTA transaction management, we can complete the same function through the container transaction management mechanism (CMT) provided by the EJB container. This function is provided by the J2EE application server.
This allows us to simply specify which method to add to the transaction. Once specified, the container will be responsible for transaction management tasks. This is our civil engineering solution, because in this way we can exclude transaction code from logical coding, and at the same time leave all difficulties to the J2EE container to solve.
使用EJB CMT的另外一個好處就是程序員無需關心JTA API的編碼,不過,理論上我們必須使用EJB。
d、JDBC事務的使用
(1)步驟:
首先,設置事務的提交方式為非自動提交:conn.setAutoCommit(false);接下來,將需要添加事務的代碼放入try,catch塊中。
然后,在try塊內(nèi)添加事務的提交操作,表示操作無異常,提交事務:conn.commit();尤其不要忘記,在catch塊內(nèi)添加回滾事務,表示操作出現(xiàn)異常,撤銷事務:conn.rollback();最后,設置事務提交方式為自動提交:conn.setAutoCommit(true);這樣,通過簡單的幾步,我們就可以完成對事務處理的編寫了。
(2)偽代碼:
con = DriverManager.getConnection(url, user, password); String result = ""; String sql1 = ""; // LAST_INSERT_ID() 獲取剛剛插入的自動遞增的ID String sql2 = ""; int flag; try { con.setAutoCommit(false);// 更改JDBC事務的默認提交方式 pstmt = con.prepareStatement(sql1); flag = pstmt.executeUpdate(); if (flag > 0) { pstmt = con.prepareStatement(sql2); int i = pstmt.executeUpdate(); if (i > 0) { con.commit();//提交JDBC事務 result = "add data success!!"; } else { result = "add data fail!!"; } } else { result = "add data fail!!"; } } catch (SQLException e) { try { con.rollback();//回滾JDBC事務 } catch (SQLException e1) { // TODO Auto-generated catch block result = "add data fail!! SQLException"; e1.printStackTrace(); } result = "add data fail!! SQLException"; e.printStackTrace(); } finally { try { con.setAutoCommit(true); // 恢復JDBC事務的默認提交方式 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result;
4、三種事務差異
1、JDBC事務控制的局限性在一個數(shù)據(jù)庫連接內(nèi),但是其使用簡單。
2、JTA事務的功能強大,事務可以跨越多個數(shù)據(jù)庫或多個DAO,使用也比較復雜。
3、容器事務,主要指的是J2EE應用服務器提供的事務管理,局限于EJB應用使用。
5、總結(jié)
事務控制是構(gòu)建J2EE應用不可缺少的一部分,合理選擇應用何種事務對整個應用系統(tǒng)來說至關重要。一般說來,在單個JDBC 連接連接的情況下可以選擇JDBC事務,在跨多個連接或者數(shù)據(jù)庫情況下,需要選擇使用JTA事務,如果用到了EJB,則可以考慮使用EJB容器事務。
更多相關知識請關注java基礎教程欄目
The above is the detailed content of Transaction processing in JAVA. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The key to writing PHP comments is to clarify the purpose and specifications. Comments should explain "why" rather than "what was done", avoiding redundancy or too simplicity. 1. Use a unified format, such as docblock (/*/) for class and method descriptions to improve readability and tool compatibility; 2. Emphasize the reasons behind the logic, such as why JS jumps need to be output manually; 3. Add an overview description before complex code, describe the process in steps, and help understand the overall idea; 4. Use TODO and FIXME rationally to mark to-do items and problems to facilitate subsequent tracking and collaboration. Good annotations can reduce communication costs and improve code maintenance efficiency.

Comments cannot be careless because they want to explain the reasons for the existence of the code rather than the functions, such as compatibility with old interfaces or third-party restrictions, otherwise people who read the code can only rely on guessing. The areas that must be commented include complex conditional judgments, special error handling logic, and temporary bypass restrictions. A more practical way to write comments is to select single-line comments or block comments based on the scene. Use document block comments to explain parameters and return values at the beginning of functions, classes, and files, and keep comments updated. For complex logic, you can add a line to the previous one to summarize the overall intention. At the same time, do not use comments to seal code, but use version control tools.

The key to writing good comments is to explain "why" rather than just "what was done" to improve the readability of the code. 1. Comments should explain logical reasons, such as considerations behind value selection or processing; 2. Use paragraph annotations for complex logic to summarize the overall idea of functions or algorithms; 3. Regularly maintain comments to ensure consistency with the code, avoid misleading, and delete outdated content if necessary; 4. Synchronously check comments when reviewing the code, and record public logic through documents to reduce the burden of code comments.

The key to writing PHP comments is clear, useful and concise. 1. Comments should explain the intention behind the code rather than just describing the code itself, such as explaining the logical purpose of complex conditional judgments; 2. Add comments to key scenarios such as magic values, old code compatibility, API interfaces, etc. to improve readability; 3. Avoid duplicate code content, keep it concise and specific, and use standard formats such as PHPDoc; 4. Comments should be updated synchronously with the code to ensure accuracy. Good comments should be thought from the perspective of others, reduce the cost of understanding, and become a code understanding navigation device.

The first step is to select the integrated environment package XAMPP or MAMP to build a local server; the second step is to select the appropriate PHP version according to the project needs and configure multiple version switching; the third step is to select VSCode or PhpStorm as the editor and debug with Xdebug; in addition, you need to install Composer, PHP_CodeSniffer, PHPUnit and other tools to assist in development.

There are three common ways to use PHP comments: single-line comments are suitable for briefly explaining code logic, such as // or # for the explanation of the current line; multi-line comments /*...*/ are suitable for detailed description of the functions or classes; document comments DocBlock start with /** to provide prompt information for the IDE. When using it, you should avoid nonsense, keep updating synchronously, and do not use comments to block codes for a long time.

PHP comparison operators need to pay attention to type conversion issues. 1. Use == to compare values only, and type conversion will be performed, such as 1=="1" is true; 2. Use === to require the same value as the type, such as 1==="1" is false; 3. Size comparison can be used on values and strings, such as "apple"

PHP comments are parts of the code that are used to interpret logic, tag tasks, or temporarily block code and are not executed by the server. Its core functions include: 1. Improve the readability of the code, which facilitates quick understanding of others and future self; 2. Supports two formats: single-line comments (// or #) and multi-line comments (//); 3. Common uses cover function descriptions, complex logic explanations, TODO markings and disable code during debugging; 4. Effective comments should avoid duplicate code, explain the reasons rather than operations, keep it concise and add version records where necessary, thereby significantly improving code maintenance efficiency.
