本教程解释了 JDBC 事务类型、数据类型、事务管理方法,以及如何在 Java 程序中使用它们:
在JDBC 教程系列的JDBC ResultSet教程中,我们学习了使用 JDBC ResultSet 来检索数据。
在本教程中,我们将讨论 JDBC 中的事务类型。我们已经在之前的教程中看到了对事务类型的简要介绍。在这里,我们将详细了解。我们还将介绍 JDBC 中的数据类型以及如何在 Java 程序中使用它。
数据库将具有不同的数据类型,Java 将具有不同的数据类型。JDBC 将管理这种差异化。让我们准备好了解 JDBC 中的重要主题。
JDBC 事务管理
操作序列(SQL 语句)被视为称为事务的单个单元。事务管理对于面向 RDBMS 的应用程序保持数据完整性和一致性很重要。
在执行事务时,我们将使用 getXXX 和 setXXX 方法来检索和设置 ResultSet 对象中的数据。XXX 代表列的数据类型。我们将在本教程中讨论 JDBC 的事务和数据类型。
交易类型
在 JDBC 中,每个 SQL 查询都将被视为一个事务。当我们在 JDBC 中创建数据库连接时,它将以自动提交模式运行(自动提交值为 TRUE)。SQL 语句执行后,会自动提交。
有时,我们可能希望在执行更多 SQL 语句后提交事务。这时,我们需要将自动提交值设置为 False。因此在执行所有查询之前不会提交数据。如果我们在事务中遇到异常,我们可以回滚()更改并使其像以前一样。事务管理可以很好地解释——使用 ACID 属性。
酸是什么意思
- A–原子性 ->如果所有查询都成功执行,数据将被提交,否则不会。
- C–Consistency -> DB 在任何事务之后必须处于一致状态。
- I– Isolation ->事务与其他事务隔离。
- D-Durability ->如果事务提交一次,它将保持始终提交。
事务管理中有三个最重要的功能。 他们是:
- 提交: 在执行 SQL 语句后,我们希望将更改永久保存在数据库中。我们应该调用 commit() 方法。通常,提交意味着它将在数据库中永久进行更改。我们无法撤消/撤销更改。但是我们可以更改数据库中的数据。
- 回滚: 回滚撤消更改,直到最后一次提交或提到的保存点。有时我们可能想要撤消更改。比如我们有一个嵌套查询,一部分已经执行成功,另一部分抛出了一些异常。那时,我们要撤消第一部分所做的更改,如果发生异常,我们应该调用 Rollback() 方法来执行此操作。
- 保存点: 保存点有助于在事务中创建检查点,并允许回滚到该特定保存点。为事务创建的任何保存点都将在事务提交或回滚后自动销毁并失效。
到目前为止,我们已经了解了什么是提交、回滚和保存点及其操作。下面,我们将看到它的方法以及如何在程序中使用它。
事务管理方法
连接接口提供了 5 种事务管理方法。它们如下:
#1) setAutoCommit() 方法
默认情况下,AutoCommit 值的值为 TRUE。SQL 语句执行后,会自动提交。通过使用 setAutoCommit() 方法,我们可以将值设置为 AutoCommit。
#2) Commit() 方法
commit 方法用于提交数据。SQL语句执行完毕后,我们可以调用commit()。它将提交由 SQL 语句所做的更改。
语法: conn.commit();
#3) Rollback() 方法
回滚方法用于撤消更改,直到最后一次提交发生。如果我们在 SQL 语句的执行流程中遇到任何问题或异常,我们可能会回滚事务。
语法: conn.rollback();
#4) setSavepoint() 方法
Savepoint 为您提供了对事务的额外控制。当您在事务(一组 SQL 语句)中设置保存点时,您可以使用 rollback() 方法撤消直到保存点或保存点()之后的所有更改。setSavepoint() 方法用于创建新的保存点。
#5) releaseSavepoint() 方法
它用于删除创建的保存点。
在下面的程序中,您将更多地了解这些方法,还将学习如何在 Java 程序中使用它。
在本教程中,所有程序都是用 Java 编写的。我们使用了 Java 8 版本和 Oracle DB。
>> 点击这里下载 Oracle 软件。
>> 点击这里下载 Java 版本 8。
它有一步一步的Java安装过程。
事务示例程序
package com.STH.JDBC;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;
public class Transaction_Management {
public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
//Select Query to get the Data from employee_details table
String QUERY = "select * from employee_details where empNum = 2001" ;
String QUERY1 = "select * from employee_details where empNum = 2002" ;
Boolean autoCommit;
String update_query = "update employee_details set salary = 41000 where empNum = 2001" ;
String update_query1 = "update employee_details set salary = 42000 where empNum = 2002" ;
//Update query to set the email id for the employee whose empNUM is 1001
Class.forName( "oracle.jdbc.driver.OracleDriver" );
try (Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:system/pass123@localhost:1521:XE" ))
{
Statement statemnt1 = conn.createStatement();
ResultSet rs1 = null ;
//Checking whether the SELECT query is executed successfully or not
rs1 = statemnt1.executeQuery(QUERY);
//Executed the SELECT Query
System.out.println( "Getting the data from employee_details table" );
displayData(rs1);
//Set the autoCommit value of the connection to FALSE
System.out.println( "Setting the AutoCommit value as FALSE" );
conn.setAutoCommit( false );
autoCommit = conn.getAutoCommit();
System.out.println( "AutoCommit value of the Connection = " + autoCommit);
//Creating Statement to execute the update query
statemnt1 = conn.createStatement();
System.out.println( "Executing Update query to update salary of EMPNUM = 2001" );
System.out.println( "Update Query is " + update_query);
int return_rows = statemnt1.executeUpdate(update_query);
System.out.println( "Updated the data but didn't commit" );
//Getting data after Updation
Connection conn1 = DriverManager.getConnection( "jdbc:oracle:thin:system/pass123@localhost:1521:XE" );
System.out.println( "Opening new connection" );
System.out.println( "EMPNUM = 2001 data" );
Statement statement2 = conn1.createStatement();
ResultSet rs;
rs = statement2.executeQuery(QUERY);
displayData(rs);
System.out.println( "Commit has been done" );
conn.commit();
Savepoint s1 = conn.setSavepoint();
System.out.println( "SavePoint has been created" );
System.out.println( "Displaying data of EMPNUM = 2001" );
System.out.println( "Using The Second Connection" );
rs = statement2.executeQuery(QUERY);
displayData(rs);
rs = statemnt1.executeQuery(QUERY);
//Rollback the transaction
System.out.println( "Data of EMPNUM = 2002" );
rs1 = statemnt1.executeQuery(QUERY1);
displayData(rs1);
System.out.println( "Updating the salary of EMPNUM = 2002" );
System.out.println( "Update Query is " + update_query1);
statemnt1.executeUpdate(update_query1);
System.out.println( "Data of EMPNUM = 2002 but didn't commit" );
rs1 = statemnt1.executeQuery(QUERY1);
displayData(rs1);
System.out.println( "Rollback is done... so updated data won't be reflected" );
conn.rollback(s1);
System.out.println( "Data of EMPNUM = 2002 after Rollback till the last savepoint" );
rs1 = statemnt1.executeQuery(QUERY1);
displayData(rs1);
}
catch (SQLException e) {
e.printStackTrace();
}
}
public static void displayData(ResultSet rs1) throws SQLException
{
while (rs1.next())
{
int empNum = rs1.getInt( "empNum" );
String lastName = rs1.getString( "lastName" );
String firstName = rs1.getString( "firstName" );
String email = rs1.getString( "email" );
String deptNum = rs1.getString( "deptNum" );
String salary = rs1.getString( "salary" );
System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email + "," +deptNum + "," +salary);
}
}
}
|
输出:
解释:
我们在上述事务管理程序中所做的是更新 EMPLOYEE_DETAILS 表中给定员工的值并提交数据。如果发生任何错误或异常,那么我们已经完成了 rollback() 操作。现在我们将看到该程序的完整说明。
#1)根据 2 名员工的 EMPID 创建 2 选择查询
以下是 2 个选择查询。
String QUERY = "select * from employee_details where empNum = 2001" ;
String QUERY1 = "select * from employee_details where empNum = 2002" ;
|
#2)根据 2 名员工的 EMPID 创建了两个更新查询
两个更新的查询:
String update_query = "update employee_details set salary = 41000 where empNum = 2001" ;
String update_query1 = "update employee_details set salary = 42000 where empNum = 2002" ;
|
#3)打开Connection,执行select查询,显示EMPNUM = 2001的数据。
#4)使用 setAutoCommit() 方法,将 autoCommit 的值设置为 false。
#5)执行 EMPNUM = 2001 的更新查询并为同一个数据库创建另一个连接并选择 EMPNUM =2001 的值。
#6) EMPNUM = 2001 的Employee的结果数据不是更新的数据。因为我们还没有完成 commit() 操作。如果您在更新时使用了相同的连接,它会向您显示更新后的数据。现在提交数据。数据已反映在表中。
#7)在提交操作后创建一个保存点。
#8)使用选择查询显示 EMPNUM = 2002 的数据。使用更新查询更改了该员工的工资。之后显示 EMPNUM = 2002 的数据,使用相同的连接。它应该显示更新的数据。
#9)使用回滚方法完成回滚直到最后一个保存点。现在,当我们使用相同的连接显示该员工的数据时,它具有旧数据,因为如果我们在最后一次提交中提及保存点,则回滚会撤消直到最后一个保存点的更改。
#10)我们创建了一种显示数据的方法,因为我们在这里多次显示数据。
JDBC 数据类型
数据库具有 SQL 数据类型,Java 具有 Java 数据类型。Java 应用程序和数据库之间应该有一种读写数据的机制。不同的数据库支持 SQL 类型,但名称有所不同。
例如,大多数数据库都支持大二进制值,Oracle 将其称为 LONG RAW,Sybase 将其称为 IMAGE,Informix 将其称为 BYTE,DB2 将其称为 LONG VARCHAR FOR BIT DATA。
在编写 JDBC 程序时,我们不必担心目标数据库使用的 SQL 数据类型。JDBC 在 java.sql.Types 类中有一组通用 SQL 类型标识符。这些类型旨在支持大多数通用 SQL 数据类型。在编写 JDBC 程序时,我们将只使用 JDBC 数据类型。
JDBC 驱动程序将 Java 数据类型来回转换为数据库数据类型。您可以使用 java.sql.DatabaseMetaData.getTypeInfo 方法检查给定数据库实际支持哪些 SQL 类型,然后编写程序。JDBC 对大多数数据类型使用默认映射。
例如, Java 字符串将被转换为 SQL VARCHAR 类型。
我们将在下表中的preparedStatement或CallableStatement或ResultSet接口的setXXX、getXXX和updateXXX方法中看到映射是如何完成的:
SQL 类型 | JAVA/ JDBC 类型 | 设置XXX | 得到XXX | 更新XXX |
---|---|---|---|---|
字符 | java.lang.String | 设置字符串 | 获取字符串 | 更新字符串 |
VARCHAR | java.lang.String | 设置字符串 | 获取字符串 | 更新字符串 |
LONGVARCHAR | java.lang.String | 设置字符串 | 获取字符串 | 更新字符串 |
少量 | 布尔值 | 设置布尔值 | getBoolean | 更新布尔值 |
数字 | java.math.BigDecimal | setBigDecimal | getBigDecimal | 更新BigDecimal |
小灵通 | 短的 | 设置短 | 得到短 | 更新短 |
整数 | 整数 | 集合 | 有色 | 更新整数 |
大整数 | long | 设置长 | 得到长 | 更新长 |
真实的 | 漂浮 | setFloat | getFloat | 更新浮动 |
漂浮 | 漂浮 | setFloat | getFloat | 更新浮动 |
双倍的 | 双倍的 | 设置双 | 得到双 | 更新双 |
二进制 | 字节[] | 设置字节 | 获取字节 | 更新字节 |
日期 | java.sql.Date | 设置日期 | 获取日期 | 更新日期 |
时间 | java.sql.Time | 设置时间 | 获取时间 | 更新时间 |
时间戳 | java.sql.时间戳 | 设置时间戳 | 获取时间戳 | 更新时间戳 |
CLOB | java.sql.Clob | setClob | 获取Clob | 更新Clob |
斑点 | java.sql.Blob | setBlob | 获取Blob | 更新Blob |
大批 | 大批 | 集合数组 | 获取数组 | 更新数组 |
XML | xml | 设置SQLXML | 获取SQLXML | 更新SQLXML |
结构化类型 | 目的 | 设置对象 | 获取对象 | 更新对象 |
在之前的教程中,我们已经为基本数据类型提供了 setXXX、getXXX 和 updateXXX 方法。你可以参考那个。
在这里,我们在以下示例中解释了 clob 和 blob 类型。
BLOB 示例程序
package com.STH.JDBC;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Blob_Example {
@SuppressWarnings ( "resource" )
public static void main(String[] args) throws ClassNotFoundException, IOException {
// TODO Auto-generated method stub
String QUERY = "Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)" ; //Select Query to get the Data from employee_details table
//Update query to set the email id for the employee whose empNUM is 1001
Class.forName( "oracle.jdbc.driver.OracleDriver" );
System.out.println( "Establishing Connection" );
try (Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:system/pass123@localhost:1521:XE" ))
{
Statement statemnt1 = conn.createStatement();
//Executing the Create Query
statemnt1.execute(QUERY);
System.out.println( "Table has been created for BLOB type" );
System.out.println( "Inserting data into Blob_Sample_Example table" );
String insert_query = " insert into Blob_Sample_Example values(?,?)" ;
//Passing the values for preparedStatement
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
pstmnt.setString( 1 , "Sotware Testing Help" );
//Mention Image path to store the image in DB
FileInputStream inputStream = new FileInputStream( "D:\\Bhakiya\\Bhakiya\\JDBC\\Software Testing Pic.png" );
pstmnt.setBlob( 2 , inputStream);
//Executing the preparedStatement to insert the data
pstmnt.execute();
System.out.println( "Retrieving data" );
ResultSet rs = statemnt1.executeQuery( "select * from Blob_Sample_Example" );
while (rs.next())
{
//Getting Picture Name
System.out.println( "Picture Name:" + rs.getString( 1 ));
Blob blob1 = rs.getBlob( 2 );
//using blob retrieving the Image
byte byteArray[] = blob1.getBytes( 1 ,( int )blob1.length());
FileOutputStream outPutStream = new FileOutputStream( "D:\\Bhakiya\\Bhakiya\\JDBC\\Software Testing Pic output.png" );
outPutStream.write(byteArray);
System.out.println( " Go to the following path: D:\\Bhakiya\\Bhakiya\\JDBC\\Software Testing Pic output.png" );
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
|
输出:
文件已成功保存在给定路径中。
解释:
在上面的程序中,我们所做的是首先我们在文件夹“D:\\Bhakiya\\Bhakiya\\JDBC”中创建/保存了一张图像。这个位置只是一个例子。您可以在系统中创建自己的文件路径。该文件的名称是软件测试图片。然后我们创建了一个 Java 程序来将该图像存储在 DB 表中,并从表中检索图像并将其存储在本地系统中。
到目前为止,我们已经讨论了任务的概述。现在我们将看看我们是如何在程序中实现它的。
#1)在数据库中创建一张表来存储图像。
句法:
String QUERY = "创建表 Blob_Sample_Example (PicName varchar2(30), 图片 BLOB)";
在上面的查询中,我们有 2 列。
- PicName – varchar2 -> 用来存放图片的名字
- 图片 - BLOB -> 用于将图片存储在表中。
BLOB 数据类型用于将图片/图像存储在 DB 表中。
#2)已创建连接和语句并调用执行方法来执行创建查询。
statemnt1.execute(QUERY);
#3)接下来,我们创建了插入查询并使用 PreparedStatement 执行它。
PreparedStatement 语法:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
#4)使用 setString() – 设置图片的名称。
#5)要设置图片,请使用 FileInputStream 类传递图片位置。
句法:
FileInputStream inputStream = new FileInputStream("图片全路径");
然后,使用 setBlob() 方法,我们可以在 PreparedStatement 对象中设置图片。之后,调用 PreparedStatement 的执行方法。这将在表中插入给定的数据。
执行插入查询后,通过使用 ResultSet 对象,我们从 Table 中检索数据(使用 Select Query)。
#6)通过使用getString方法,我们可以得到PicName Column的值。
#7) 要获取图片,请按照以下步骤操作:
- 创建 Blob 对象并分配 ResultSet 对象的 getBlob 方法的返回值。
- 语法为:Blob blob1 = rs.getBlob(<ColumnIndex>);
- 创建一个字节数组对象并以字节形式获取 Blob 对象的值。
- 创建对象 FileOutputStream 对象并传递完整路径以将图片存储在该路径中。调用 FileOutputStream 对象的 write() 方法——这将存储图片。
- 之后程序已成功执行。
#8)到Output图片所在的位置,检查输入输出是否一致。
CLOB 示例程序
package com.STH.JDBC;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Clob_Example {
public static void main(String[] args) throws ClassNotFoundException, IOException {
// TODO Auto-generated method stub
String QUERY = "Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)" ;
//Create Query to create new table for CLOB example
Class.forName( "oracle.jdbc.driver.OracleDriver" );
//Creating Connection
System.out.println( "Establishing Connection" );
try (Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:system/pass123@localhost:1521:XE" ))
{
Statement statemnt1 = conn.createStatement();
//Executing create query
statemnt1.execute(QUERY);
System.out.println( "Table has been created for CLOB type" );
System.out.println( "Inserting data into Clob_Sample_Example table" );
//Insert Query
String insert_query = " insert into Clob_Sample_Example values(?,?)" ;
//Passing Parameters for PreparedStatement
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
pstmnt.setString( 1 , "File1" );
FileReader fileRead = new FileReader( "D:\\Bhakiya\\Bhakiya\\JDBC\\file1.txt" );
pstmnt.setClob( 2 , fileRead);
//Executing the PreparedStatement
pstmnt.execute();
System.out.println( "Retrieving data" );
ResultSet rs = statemnt1.executeQuery( "select * from Clob_Sample_Example" );
while (rs.next())
{
System.out.println( "File Name:" + rs.getString( 1 ));
//Getting file data
Clob clob1 = rs.getClob( 2 );
Reader r = clob1.getCharacterStream();
//Using Reader - read the data and Writer - Write the data in file in the given location
FileWriter fileWrite = new FileWriter( "D:\\Bhakiya\\Bhakiya\\JDBC\\file1 output.txt" );
int i;
while ((i=r.read())!=- 1 )
fileWrite.write(i);
fileWrite.close();
System.out.println( " Go to the following path: D:\\Bhakiya\\Bhakiya\\JDBC\\file1 output.txt" );
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
|
输出:
输入文件:
文件已成功保存在给定路径中。
输出文件:
解释:
在上面的程序中,我们首先在“D:\\Bhakiya\\Bhakiya\\JDBC”文件夹中创建/保存了一个文本文件“file1.txt”。这个位置只是一个例子。您可以在系统中创建自己的文件路径。然后我们创建了一个 Java 程序来将该文件存储在 DB 表中,并从表中检索该文件并将其存储在本地系统中。
到目前为止,我们已经讨论了任务的概述。现在我们将看看我们是如何在程序中实现它的。
#1)在数据库中创建一张表来存储图像。
下面是 CREATE TABLE 查询的语法:
String QUERY = "创建表 Clob_Sample_Example (FileName varchar2(30), StoreFile CLOB)";
在上面的查询中,我们有 2 列。
- FileName - varchar2 -> 用来存放图片的名字。
- StoreFile - CLOB -> 用于将文件存储在 Table 中。
CLOB数据类型用于存储DB Table中二进制数据的Character类型
#2)已创建连接和语句并调用执行方法来执行创建查询。
statemnt1.execute(QUERY);
#3)接下来,我们创建了插入查询并使用 PreparedStatement 执行它。
PreparedStatement 语法:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
#4)使用 setString() – 设置 FileName 的名称。
#5)要设置/存储文件,请使用 FileReader 类传递带有填充位置的文件。
句法:
FileReader fileRead = new FileReader("D:\\Bhakiya\\Bhakiya\\JDBC\\file1.txt");
然后使用 setClob() 方法,我们可以在 PreparedStatement 对象中设置文件。之后调用 PreparedStatement 的执行方法。这将在表中插入给定的数据。
执行插入查询后,我们使用 ResultSet 对象从表中检索数据(使用选择查询)。
选择查询:
“从 Clob_Sample_Example 中选择 *”
#6)使用 getString 方法我们可以获得 FileName Column 的值。
#7)要获取文件,我们遵循以下步骤:
- 创建 Clob 对象并分配 ResultSet 对象的 getClob 方法的返回值。
- 语法是:Clob clob1 = rs.getClob(<ColumnIndex>);
- 创建 Reader 对象并获取 Clob 对象的值为 Character。
- 创建对象 FileWriter 对象并传递完整路径以将文件存储在该路径中。调用 FileWrite 对象的 write() 方法——这会将数据写入文件中的位置。
- 之后程序已成功执行。
#8)到Output文件所在位置,检查输入输出文件是否相同。
要记住的要点:
- ACID Properties 解释了数据库中的事务管理。
- Commit()、rollback() 和 savepoint 是 Transaction Management 中最重要的操作。
- 提交将在数据库中永久进行更改,回滚将撤消更改,直到最后一次提交或提到的保存点,保存点有助于创建检查点。
- 数据库维护 SQL 数据类型,Java 维护 Java 数据类型。JDBC 驱动程序用于处理这种转换。
- JDBC驱动本身有一些SQL类型的标识符,所以程序员不用担心数据类型。
经常问的问题
Q #1) 什么是 JDBC 数据类型?
答: Java 有它的数据类型,数据库也有它的数据类型。JDBC 驱动程序将 Java 数据类型转换为数据库接受的适当 SQL 数据类型。ResultSet 对象还提供可用于适当数据类型的 setXXX() 方法和 getXXX() 方法。
Q #2) Java 中日期的数据类型是什么?
答: Java 中的日期不仅是一种数据类型,而且是一个类。Java 中的 Date 具有日期、时间、年份、日期名称、星期几和时区。Date 类具有适当的方法来检索相关数据。
Q #3) java.util.Date 和 java.sql.Date 有什么区别?
答:主要区别在于 java.util.Date 也包含有关日期和时间的信息。但 java.sql.Date 仅包含有关日期的信息。这是我们不能将 java.util.Date 直接映射到 java.sql.Date 的主要区别。
Q #4) 我们在 Java 中有一个类来表示 SQL 的 TIME 和 TIMESTAMP 类型吗?
答:是的,我们有一个用于 SQL 的 TIME 和 TIMESTAMP 类型的类。java.sql.Time 类表示与 TIME 相关的信息。java.sql.timestamp 类表示 TIMESTAMP 相关信息。
Q #5) 如何在 JDBC 中启动事务?
答: JDBC 连接以启用自动提交模式开始,其中每条 SQL 语句都被视为一个事务。JDBC 中没有启动事务的特定过程。当您创建连接并开始执行 SQL 语句时,事务就开始了。
Q #6) Java 中的 commit() 方法是什么?
答: Java 中的 Commit() 方法用于保存自上次 commit() 以来所做的更改。Commit() 方法在 Connection 接口中可用。使用连接对象,我们可以调用 commit()。
Q #7) Java 中的回滚方法是什么?
回答:在最后一次commit()之后,如果出现任何问题,我们可以调用rollback()方法来恢复所有所做的更改,直到最后一次commit.rollback()方法在Connection接口中可用。使用连接对象,我们可以调用 rollback() 方法。
结论
在这里,我们介绍了 Java 和 DB 中的数据类型以及 JDBC 驱动程序如何处理它。我们已经讨论了 ACID 的特性。这对于银行业来说是最重要的。这对你的职业生涯会有很大帮助。在事务管理部分,我们讨论了提交和回滚方法,例如 commit()、rollback()、setAutoCommit()、setSavepoint() 和 releaseSavepoint()。