• 事物处理
  • 批量更新
  • 返回自动主键
  • 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高级编程相关推荐

  1. c#高级编程第11版 pdf网盘_c#高级编程_c#高级编程 目录 微盘_c#高级编程第10版 pdf...

    c#高级编程 C#高级编程(第9版)-C# 5.0 & .NET 4.5.1是由.NET专家的梦幻组合编写,包含开发人员使用C#所需的所有内容.C#是编写.NET应用程序的一种语言,本书适合于 ...

  2. python高级属性 用法 编程_python高级编程之面向对象高级编程

    1 面向对象编程 面向对象这节比较简单,就稍微总结几个特殊的点. 特殊方法__init__前后分别有两个下划线,__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init ...

  3. linux+应用程序高级编程,linux-----shell高级编程----grep应用

    1. 背景 在讲到shell编程时, 我们不得不提到正则表达式,  这个可以看似一门新的编程语言的"老家伙", 让我们很多刚入行的程序员来说又爱又恨, 爱因为它实在可以用最简短的语 ...

  4. linux shell 高级编程,shell高级编程

    条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else条件为假的分支代码 fi ...

  5. java socket 高级编程_Java高级编程-网络编程详细介绍 (一)

    java.net 包中的类和接口提供了可用于低层和高层网络编程的 API.低层 API 可以让你直接访问网络协议,但是为此你不得不使用低层的 TCP 套接字和 UDP 数据包.高层的 API (如 U ...

  6. python高级网络编程_python高级编程——网络编程(二)

    UDP 概念和介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议. UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并 不能保证它们能到达目的地. U ...

  7. 高级编程中C语言属于,c语言高级编程

    c语言高级编程 C高级编程 责任编辑:admin 更新日期:2005-8-6 深入了解C语言(函数的参数传递和函数使用参数的方法) tangl_99(原作) 关键字 C语言,汇编,代码生成,编译器 C ...

  8. 【廖雪峰python总结】python高级特性,函数式编程,面向对象编程,面向对象高级编程

    文章目录 python复习总结 python高级特性 函数式编程 面向对象编程 面向对象高级编程 python复习总结 python高级特性 python高级特性 函数式编程 函数式编程 函数式编程的 ...

  9. 数据库编程——JDBC 配置

    [0]README 1) 本文文字描述 转自 core java volume 2 , 旨在理解 数据库编程--JDBC 配置 的基础知识 : 2) update timestamp: 1602022 ...

  10. java的数据库连接编程(jdbc)技术_Java的数据库连接编程(JDBC)技术

    Java的数据库连接编程(JDBC)技术 Java的数据库连接编程(JDBC)技术 [本讲的知识要点]:JDBC.JDBC的工作原理,访问数据库的方法.Statement.PreparedStatem ...

最新文章

  1. dubbo开发环境和生产环境搭建
  2. python: ImportError:DLL load failed 解决方法。
  3. MySQL 命令行下执行.sql脚本
  4. 重构授课班时间安排模块代码
  5. 360不用卸,照样上你QQ
  6. 【初窥javascript奥秘之闭包】叶大侠病都好了,求不踩了:)
  7. 传递参数的2种情况的理解。
  8. append生成新变量的时候,没有如预期(It's a feature,not a bug?)
  9. c++ 之条件运算符--- ?:
  10. 3.2 GUN as汇编(本文内容大部分引用原文,非原创)
  11. C语言实现简单贪吃蛇代码
  12. CardView 整理
  13. c语言中compar的用法,compare 的用法
  14. 软件工程大学生职业规划书
  15. 抽象工厂模式,加工出不可思议的产品!
  16. 电信增值短信平台模块清单(sp用)
  17. Jmeter察看结果树的响应数据中的中文显示乱码问题处理
  18. 使用计算机数据采集的优点,什么是数据采集器
  19. linux 分区数据恢复
  20. linux下默认国外源下载过慢的解决方法

热门文章

  1. 第二章 通信技术(3G4G)演进对车联网的影响
  2. 如何理解微信小程序等轻应用技术
  3. 在vue中使用superagent封装http请求
  4. 移动端(H5+)唤起B站(Bilibili)APP客户端的代码。
  5. 跨域配置-Chorme坑
  6. 【相对靠谱】Vue生成二维码Qrcode,可插入二维码中心logo图标,可以设置二维码颜色大小等属性
  7. 基因家族分析⑥:用TBTOOLS画出基因在染色体上的分布图
  8. jQuery Easing 的最简单使用方法
  9. 【英语文学导读】课程论文《哈姆雷特》读后感
  10. c语言之数组数据倒序输出的快速方法和scanf的一种不常用用法的笔记