IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java JDBC 事务管理示例 -> 正文阅读

[大数据]Java JDBC 事务管理示例

本教程解释了 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设置字符串获取字符串更新字符串
VARCHARjava.lang.String设置字符串获取字符串更新字符串
LONGVARCHARjava.lang.String设置字符串获取字符串更新字符串
少量布尔值设置布尔值getBoolean更新布尔值
数字java.math.BigDecimalsetBigDecimalgetBigDecimal更新BigDecimal
小灵通短的设置短得到短更新短
整数整数集合有色更新整数
大整数long设置长得到长更新长
真实的漂浮setFloatgetFloat更新浮动
漂浮漂浮setFloatgetFloat更新浮动
双倍的双倍的设置双得到双更新双
二进制字节[]设置字节获取字节更新字节
日期java.sql.Date设置日期获取日期更新日期
时间java.sql.Time设置时间获取时间更新时间
时间戳java.sql.时间戳设置时间戳获取时间戳更新时间戳
CLOBjava.sql.ClobsetClob获取Clob更新Clob
斑点java.sql.BlobsetBlob获取Blob更新Blob
大批大批集合数组获取数组更新数组
XMLxml设置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 列。

  1. PicName – varchar2 -> 用来存放图片的名字
  2. 图片 - 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 列。

  1. FileName - varchar2 -> 用来存放图片的名字。
  2. 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()。

<<上一篇教程|?下一篇教程>>

推荐阅读

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:46:53  更:2022-04-07 22:49:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:43:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码