JDBC编程:JDBC高级编程
- 事物处理
- 批量更新
- 返回自动主键
- DAO
1,事物处理
什么是事物?
事务(Transaction):数据库中保证交易可靠的机制。JDBC支持数据库中的事务概念,并且在JDBC中,事务默认是自动提交的。
事务提交的方式有两种:
- 显示提交:使用commit;
- 自动提交:执行DDL或DCL语句,或者程序正常退出;
当事务所包含的任意一个数据库操作执行失败后,应该回滚事务(rollback),使该事务中所做的修改全部失效。
事务回滚有两种方式:
- 显示回滚:使用rollback。
- 自动回滚:系统错误或者强行退出。
事务特性介绍:(ACID)
(1)原子性(Atomicity):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行
(2)一致性(Consistency):事务在完成时,必须使所有的数据都保持一致状态
(3)隔离性(Isolation):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离
(4)持久性(Durability):事务完成之后,它对于系统的影响是永久性的
事务是数据库的概念,JDBC支持事务,本质还是在数据库中实现的。
JDBC中和事务相关API:
- Connection.getAutoCommit() :获得当前事务的提交方式,默认为true
- Connection.setAutoCommit():设置事务的提交属性,参数是true:自动提交;false:不自动提交
- Connection.commit():提交事务
- Connection.rollback():回滚事务
JDBC处理事务模式:
(1)先将事务的自动提交关闭;
(2)执行事务中的若干SQL语句;
(3)事务提交;SQL失败则回滚;
(4)恢复JDBC的事务提交状态;释放资源。
事务隔离级别:
事务的并发读问题:
- 脏读:读取到另一个事务未提交更新数据,即读取到了脏数据;
- 不可重复读:对同一记录的两次读取不一致,因为另一事物对该记录做了修改;
- 幻读(虚读):对同一张表的两次查询不一致,因为零壹拾伍插入了一条记录;
四大隔离级别:
四个等级的事务隔离级别,在相同数据环境下,使用相同的输入,执行相同的工具,根据不同的隔离级别,可以导致不同的结果。不同事务隔离级别能够解决的数据并发问题的能力是不同的。
SERIAUZABLE(串行化):不会出现任何并发性问题,因为它是对同一数据的访问是串行的,非并发访问的。
性能最差REPEATABLEREAD(可重复读):防止脏读和不可重复读,不能处理幻读问题。性能比SERIAUZABLE好
READCOMMITTED(读已提交数据):防止脏读,没有处理不可重复读,也没有处理幻读。性能比REPEATABLEREAD。
READUNCOMMITTED(读未提交数据):可能出现任何事物并发问题,性能最好;
2,批量更新
批量更新主要方法:
- PreparedStatement.addBatch():将多条预编译的SQL语句,添加到语句列表中。
- PreparedStatement.executeBatch():把语句列表中的所有SQL语句,发送给数据库处理。
- PreparedStatement.clearBatch():清空当前SQL语句列表。
批量添加:
public int[] insBatch() {Connection connection = null;Statement statement = null;String sql = "";try {//获取数据连接connection = basicUse.getConnection();//获取发送sql指令执行sql对象statement = connection.createStatement();for (int i = 0; i < 10; i++) {StringBuffer sbf = new StringBuffer("insert into student (name, age, addr, hobby) ");sbf.append(" values ('kenx',24,'上海','篮球')");sql = sbf.toString();System.out.println("执行sql" + sql);//将指定SQL添加到Statement对象的当前命令列表中statement.addBatch(sql);}//执行成功返回更新计数的数组int[] success = statement.executeBatch(); //批量执行所有sql返回一个更新计数的数组return success;} catch (Exception e) {e.printStackTrace();return null;} finally {//执行完数据库操作后记得关闭数据库连接资源try {statement.close();connection.close();} catch (SQLException e) {e.printStackTrace();}}}
批量更新:
public int[] updBatch() {Connection connection = null;Statement statement = null;String sql = "";try {//获取数据连接connection = basicUse.getConnection();//获取发送sql指令执行sql对象statement = connection.createStatement();for (int i = 1; i < 10; i++) {StringBuffer sbf = new StringBuffer("update student set hobby='足球'");sbf.append(" where id=" + i);sql = sbf.toString();System.out.println("执行sql" + sql);//将指定SQL添加到Statement对象的当前命令列表中statement.addBatch(sql);}//执行成功返回更新计数的数组int[] success = statement.executeBatch(); //批量执行所有sql返回一个更新计数的数组return success;} catch (Exception e) {e.printStackTrace();return null;} finally {//执行完数据库操作后记得关闭数据库连接资源try {statement.close();connection.close();} catch (SQLException e) {e.printStackTrace();}}}
3,返回自动主键
JDBC API:
ResultSet java.sql.Statement.getGeneratedKeys() throws SQLException
例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;public class Tester {public static void main(String[] args) throws Exception {// 注册数据库驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());// 获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "***");// 准备SQLString sql = "insert into user(name) values('Belin')";// 准备语句,配置为自动返回生成主键。PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);// 执行语句pstmt.executeUpdate();// 获取主键值,是一个ResultSet。ResultSet rs = pstmt.getGeneratedKeys();if (rs.next()) {System.out.println(rs.getInt(1));}}
}
DAO:
什么是DAO?
Data Access Object 数据访问对象,建立在数据库和业务层之间,封装所有对数据库的访问。
DAO的作用:将数据访问逻辑和业务逻辑分开。
DAO通常包括:
①,一个DAO工厂类
②,一个DAO接口
③,一个实现DAO接口的具体类
④,数据传递对象(实体对象或值对象)
实体对象:
将java程序中的对象对应到关系数据库的表中
表和类对应
表中的字段和类的属性对应
记录和对象对应
实现的步骤:
- 先建立模型的对象domain;
- 编写DAO接口;
- 定义DAO实现类;
- 生产DAO测试类;
- 在DAO测试类中测试方法;
JDBC编程:JDBC高级编程相关推荐
- c#高级编程第11版 pdf网盘_c#高级编程_c#高级编程 目录 微盘_c#高级编程第10版 pdf...
c#高级编程 C#高级编程(第9版)-C# 5.0 & .NET 4.5.1是由.NET专家的梦幻组合编写,包含开发人员使用C#所需的所有内容.C#是编写.NET应用程序的一种语言,本书适合于 ...
- python高级属性 用法 编程_python高级编程之面向对象高级编程
1 面向对象编程 面向对象这节比较简单,就稍微总结几个特殊的点. 特殊方法__init__前后分别有两个下划线,__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init ...
- linux+应用程序高级编程,linux-----shell高级编程----grep应用
1. 背景 在讲到shell编程时, 我们不得不提到正则表达式, 这个可以看似一门新的编程语言的"老家伙", 让我们很多刚入行的程序员来说又爱又恨, 爱因为它实在可以用最简短的语 ...
- linux shell 高级编程,shell高级编程
条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else条件为假的分支代码 fi ...
- java socket 高级编程_Java高级编程-网络编程详细介绍 (一)
java.net 包中的类和接口提供了可用于低层和高层网络编程的 API.低层 API 可以让你直接访问网络协议,但是为此你不得不使用低层的 TCP 套接字和 UDP 数据包.高层的 API (如 U ...
- python高级网络编程_python高级编程——网络编程(二)
UDP 概念和介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并 不能保证它们能到达目的地. U ...
- 高级编程中C语言属于,c语言高级编程
c语言高级编程 C高级编程 责任编辑:admin 更新日期:2005-8-6 深入了解C语言(函数的参数传递和函数使用参数的方法) tangl_99(原作) 关键字 C语言,汇编,代码生成,编译器 C ...
- 【廖雪峰python总结】python高级特性,函数式编程,面向对象编程,面向对象高级编程
文章目录 python复习总结 python高级特性 函数式编程 面向对象编程 面向对象高级编程 python复习总结 python高级特性 python高级特性 函数式编程 函数式编程 函数式编程的 ...
- 数据库编程——JDBC 配置
[0]README 1) 本文文字描述 转自 core java volume 2 , 旨在理解 数据库编程--JDBC 配置 的基础知识 : 2) update timestamp: 1602022 ...
- java的数据库连接编程(jdbc)技术_Java的数据库连接编程(JDBC)技术
Java的数据库连接编程(JDBC)技术 Java的数据库连接编程(JDBC)技术 [本讲的知识要点]:JDBC.JDBC的工作原理,访问数据库的方法.Statement.PreparedStatem ...
最新文章
- dubbo开发环境和生产环境搭建
- python: ImportError:DLL load failed 解决方法。
- MySQL 命令行下执行.sql脚本
- 重构授课班时间安排模块代码
- 360不用卸,照样上你QQ
- 【初窥javascript奥秘之闭包】叶大侠病都好了,求不踩了:)
- 传递参数的2种情况的理解。
- append生成新变量的时候,没有如预期(It's a feature,not a bug?)
- c++ 之条件运算符--- ?:
- 3.2 GUN as汇编(本文内容大部分引用原文,非原创)
- C语言实现简单贪吃蛇代码
- CardView 整理
- c语言中compar的用法,compare 的用法
- 软件工程大学生职业规划书
- 抽象工厂模式,加工出不可思议的产品!
- 电信增值短信平台模块清单(sp用)
- Jmeter察看结果树的响应数据中的中文显示乱码问题处理
- 使用计算机数据采集的优点,什么是数据采集器
- linux 分区数据恢复
- linux下默认国外源下载过慢的解决方法