setSavepoint and releaseSavepoint Example in Java
By: Vimala
The JDBC 3.0 API adds the method Connection.setSavepoint
, which
sets a savepoint within the current transaction. The Connection.rollback
method has been overloaded to take a savepoint argument.
The example below inserts a row into a table, sets the savepoint svpt1
,
and then inserts a second row. When the transaction is later rolled back to svpt1
,
the second insertion is undone, but the first insertion remains intact. In other
words, when the transaction is committed, only the row containing ?FIRST?
will be added to TAB1
:
Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) VALUES " + "(?FIRST?)"); // set savepoint Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1"); rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) " + "VALUES (?SECOND?)"); ... conn.rollback(svpt1); ... conn.commit();
Releasing a Savepoint
The method Connection.releaseSavepoint
takes a Savepoint
object as a parameter and removes it from the current transaction.
Once a savepoint has been released, attempting to reference it in a rollback
operation causes an SQLException
to be thrown. Any savepoints that
have been created in a transaction are automatically released and become invalid
when the transaction is committed, or when the entire transaction is rolled
back. Rolling a transaction back to a savepoint automatically releases and makes
invalid any other savepoints that were created after the savepoint in question.
When to Call the Method rollback
As mentioned earlier, calling the method rollback
aborts a
transaction and returns any values that were modified to their previous values.
If you are trying to execute one or more statements in a transaction and get an SQLException
,
you should call the method rollback
to abort the transaction and
start the transaction all over again. That is the only way to be sure of what
has been committed and what has not been committed. Catching an SQLException
tells you that something is wrong, but it does not tell you what was or was not
committed. Since you cannot count on the fact that nothing was committed,
calling the method rollback
is the only way to be sure.
Archived Comments
Comment on this tutorial
- Data Science
- Android
- AJAX
- ASP.net
- C
- C++
- C#
- Cocoa
- Cloud Computing
- HTML5
- Java
- Javascript
- JSF
- JSP
- J2ME
- Java Beans
- EJB
- JDBC
- Linux
- Mac OS X
- iPhone
- MySQL
- Office 365
- Perl
- PHP
- Python
- Ruby
- VB.net
- Hibernate
- Struts
- SAP
- Trends
- Tech Reviews
- WebServices
- XML
- Certification
- Interview
categories
Related Tutorials
TEXT datatype SPLIT in MSSQL - to solve the 8000 limit set by varchar
What is Referential Integrity in databases?
Handling CSV in Stored Procedures
java.lang.NoClassDefFoundError and java.lang.NoSuchMethodError
Calling a Stored Procedure from JDBC in Java
setSavepoint and releaseSavepoint Example in Java
PreparedStatement Example in Java
Creating Database Tables Using ANT
Using the DriverManager Class vs Using a DataSource Object for a connection
Stored Procedures example in SQL