作业讲解视屏:链接: https://pan.baidu.com/s/1BY61SYQERHz_aRsVZXbHVw 提取码: bcgr

JDBC介绍

JDBC(Java Data Base Connectivity) 是 Java 访问数据库的标准规范.是一种用于执行SQL语句的Java API,可以为
多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范.

JDBC原理

早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!

JDBC主要用于java程序和数据库服务之间的一种连接方式,所以针对于JDBC连接数据库服务时,并不关注数据库的种类,只要java程序连接的数据库遵循了JDBC规范,则java服务可以通过该种数据库指定的驱动进行数据库的连接。
在这里需要注意的是使用数据库官方给定的驱动进行数据库连接时,需要注意驱动的版本是否满足数据库的当前版本

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!

image.png总结:
JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库
驱动jar包, 我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。

JDBC开发

注册驱动

  • JDBC定义了规范的驱动接口:java.sql.Driver
  • 各数据库服务商提供驱动包

加载注册驱动的方式为Class.forName(“对应驱动包实现类”)

获取连接

  • 构建connection接口表示连接对象,具体实现类由数据库厂商提供
  • 使用DriverManager类的静态方法,getConnection获取数据库的连接

获取语句执行平台

  • 通过connection对象提供的createStatement方法获取执行sql的对象
  • statement则代表执行sql的对象,用于将要执行的sql发送至数据库并返回结果对象

    处理结果集

  • 只有在进行查询操作时才进行结果集的处理

  • ResultSet接口封装数据库查询的结果集,可通过对结果集的遍历取出每一条数据

释放资源

  • 需要释放的资源包括ResultSet、Statement、Connection
  • 释放顺序为后开启、先关闭
  • 放在finally代码块中

Sql注入问题

说明

通过输入特定格式的内容作为sql查询拼接的一部分,从而改变查询本身意义,将这种问题称为sql注入

  1. -- sql
  2. select * from jdbc_user where username = 'abc' and password = 'abc';
  3. -- 人为设置查询条件设置为abc' or '1=1',sql中1=1 为全匹配
  4. select * from jdbc_user where username = 'abc' and password = 'abc' or '1'='1';

解决方法

使用预处理对象,即PrepareStatement接口

  • PrepareStatement接口是statement接口的子接口,继承父类全部方法。
  • 预编译作用于sql储存在preparestatement对象中。在执行sql之前会对sql进行校验,校验通过后才会执行,所以可以避免出现sql注入问题
  • 提供预编译

PreparedStatement

PreparedStatement执行原理

image.png

JDBC控制事务

事务相关API

image.png

开发步骤

  • 获取连接
  • 开启事务
  • 获取PreparedStatement,执行Sql
  • 正常情况下提交事务
  • 出现异常回滚事务
  • 关闭资源

数据库连接池

连接池介绍

  • 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池

    连接池好处

  • 用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的 close()方法也不会真的关闭Connection,而是把Connection“归还”给池。

JDBC连接和连接池连接的区别

  • JDBC连接

image.png

  • 连接池连接

image.png

DBUtils工具类

DBUtils介绍

commons DBUtils 是apache组织提供的一个对JDBC简单封装的开源工具类库,简化JDBC应用程序的开发同时保证程序性能

核心功能

QueryRunner Classes提供操作sql的API

ResultSetHandler Classes,定义select操作后,如何封装结果集

DbUtils Classes

数据库批处理

批处理定义

  • 批处理(batch) 操作数据库
    • 批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
    • 当向数据库中添加大量的数据时,需要用到批处理。
  • 举例: 送货员的工作:
    • 未使用批处理的时候,送货员每次只能运送 一件货物给商家;
    • 使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户。

实现批处理方法

image.png

表和类之间的关系

可以将一个表看做一个类,把每一列看做是一个属性,每一个类创建的对象看做是表中的一行数据

Java Bean组件

通常在开发过程中使用JavaBean进行数据的封装,其有以下特点

  • 需要实现序列化接口,Serializable
  • 提供私有字段:private 类型 变量
  • 提供getter和setter
  • 提供空参构造

java项目分录分类

  • entity通常用来保存封装数据的类,成员变量私有,提供get set 空参,继承序列化接口
  • dao数据访问层

XML

XML的定义

可扩展标记语言

特点:

  • 可扩展的,标签都是定义的
  • 语法十分严格

XML的作用

image.png

XML约束

  • 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
  • 常见的xml约束:
    • DTD
    • Schema
  • 作为程序员只要掌握两点
    • 会阅读
    • 会引入
    • 不用自己编写

XML解析方式

开发中比较常见的解析方式有两种,如下:

  • DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
    • 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
    • 缺点:XML文档过大,可能出现内存溢出显现。
  • SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方 式进行具体解析,每执行一行,都将触发对应的事件。(了解)
    • 优点:占用内存少 处理速度快,可以处理大文件
    • 缺点:只能读,逐行后将释放资源。

XML常见的解析器

解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,
有提供易于操作的解析开发包

  • JAXP:sun公司提供的解析器,支持DOM和SAX两种思想
  • DOM4J:一款非常优秀的解析器 , Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。 它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
  • Jsoup:jsoup 是一款Java 的HTML解析器 ,也可以解析XML
  • PULL:Android内置的XML解析方式,类似SAX。