概述
JDBC简介
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。数据库生产产商都根据接口模型去实现各自的应用驱动,Java程序员只需指定不同的数据库应用驱动,便可根据API对相应数据库发送SQL调用。
常见的JDBC组件
JDBC API提供以下接口和类DriverManager:此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。
Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。 但会使用DriverManager对象来管理这种类型的对象。 它还提取与使用Driver对象相关的信息。
Connection:此接口具有用于联系数据库的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。
Statement:使用从此接口创建的对象将SQL语句提交到数据库。 除了执行存储过程之外,一些派生接口还接受参数。
ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。 它作为一个迭代器并可移动ResultSet对象查询的数据。
SQLException:此类处理数据库应用程序中发生的任何错误。
JDBC事务
关闭自动提交
如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库。
要启用手动事务支持,而不是使用JDBC驱动程序默认使用的自动提交模式,请调用Connection对象的setAutoCommit()方法。 如果将布尔的false传递给setAutoCommit(),则关闭自动提交。 也可以传递一个布尔值true来重新打开它。
例如,如果有一个名为conn的Connection对象,请将以下代码关闭自动提交 -
conn.setAutoCommit(false);
提交和回滚
完成更改后,若要提交更改,那么可在连接对象上调用commit()方法,如下所示:
conn.commit( );
否则,要使用连接名为conn的数据库回滚更新,请使用以下代码 -
conn.rollback( );
JDBC设置隔离级别
假定您的数据库和 JDBC 驱动程序支持这个特性,则给定一个 Connection对象,您可以明确地设置想要的事务级别。
JDBC五种事务级别
int TRANSACTION_NONE = 0; // 不支持事务int TRANSACTION_READ_UNCOMMITTED = 1; // 隔离级别为读未提交int TRANSACTION_READ_COMMITTED = 2; // 隔离级别为读已提交int TRANSACTION_REPEATABLE_READ = 4; // 隔离级别为可重复读int TRANSACTION_SERIALIZABLE = 8; // 隔离级别为串行化
MySQL支持4种隔离级别、Oracle支持两种隔离级别。 不同的隔离级别解决不同的并发问题。因为“数据库事务的四大特性以及事务的隔离级别”这篇博客已做笔记,本篇就不再赘述,想了解的可以查看这篇博客。
JDBC查看、设置数据库的事务隔离级别
可以通过下面的方法确定当前事务的级别:
int level = conn.getTransactionIsolation();
可以通过下面的方法设置当前事务的隔离级别
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
设置当前事务的隔离级别,必须当前项目数据库支持这个隔离级别。不然会报SQLException。比如:给Oracle设置TRANSACTION_REPEATABLE_READ隔离级别,程序就会发生异常。
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
// 程序发生SQLExceptionjava.sql.SQLException: 仅 READ_COMMITTED 和 SERIALIZABLE 是有效的事务处理级
JDBC事务保存点
有时候一个事务可能是一组复杂的语句,因此可能想要回滚到事务中某个特殊的点。比如我们有一张日志表Logs,用来记录员工信息保存成功的日志。但是因为它只用于日志记录,当插入日志表有任何异常时,我们不希望回滚整个事务,而是日志异常也提交保存的员工信息。那么可以创建一个JDBC事务保存点。
JDBC Savepoint帮我们在事务中创建检查点(checkpoint),这样就可以回滚到指定点。当事务提交或者整个事务回滚后,为事务产生的任何保存点都会自动释放并变为无效。把事务回滚到一个保存点,会使其他所有保存点自动释放并变为无效。
public class EmployeeJDBCSavePointExample {
public static final String INSERT_LOGS_QUERY = "insert into Logs (message) values (?)";
public static void main(String[] args) {
Connection con = null;
Savepoint savepoint = null;
try {
con = DBConnection.getConnection();
con.setAutoCommit(false);
EmployeeJDBCInsertExample.insertEmployeeData(con, 2, "Pankaj");
EmployeeJDBCInsertExample.insertAddressData(con,
2,
"Albany Dr",
"SFO",
"USA");
savepoint = con.setSavepoint("EmployeeSavePoint");
insertLogData(con, 2);
con.commit();
}
catch (SQLException e) {
e.printStackTrace();
try {
if (savepoint == null) {
con.rollback();
System.out.println("JDBC Transaction rolled back successfully");
} else {
con.rollback(savepoint);
con.commit();
}
}
catch (SQLException e1) {
System.out.println("SQLException in rollback" + e.getMessage());
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally {
try {
if (con != null)
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void insertLogData(Connection con, int i)
throws SQLException {
PreparedStatement stmt = con.prepareStatement(INSERT_LOGS_QUERY);
stmt.setString(1, "Employee information saved successfully for ID" + i);
stmt.executeUpdate();
System.out.println("Logs Data inserted successfully for ID=" + i);
stmt.close();
}
}
JDBC常用配置信息
MySQL JDBC驱动和数据库URL配置
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://hostname:port/db_name";
// 如需指定国际化参数static final String DB_URL = "jdbc:mysql://hostname:port/db_name?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
Oracle JDBC驱动和数据库URL配置
static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
static final String DB_URL = "jdbc:oracle:thin:@host:port:SID";
Oracle查询SID语句
select value from v$parameter where name='instance_name';
参考资料:
最后
以上就是难过麦片为你收集整理的jdbc mysql 事务_JDBC事务、简介的全部内容,希望文章能够帮你解决jdbc mysql 事务_JDBC事务、简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复