作业讲解视屏:链接: 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驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!
总结:
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注入
-- 原sql
select * from jdbc_user where username = 'abc' and password = 'abc';
-- 人为设置查询条件设置为abc' or '1=1',sql中1=1 为全匹配
select * from jdbc_user where username = 'abc' and password = 'abc' or '1'='1';
解决方法
使用预处理对象,即PrepareStatement接口
- PrepareStatement接口是statement接口的子接口,继承父类全部方法。
- 预编译作用于sql储存在preparestatement对象中。在执行sql之前会对sql进行校验,校验通过后才会执行,所以可以避免出现sql注入问题
- 提供预编译
PreparedStatement
PreparedStatement执行原理
JDBC控制事务
事务相关API
开发步骤
- 获取连接
- 开启事务
- 获取PreparedStatement,执行Sql
- 正常情况下提交事务
- 出现异常回滚事务
- 关闭资源
数据库连接池
连接池介绍
实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池
连接池好处
用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的 close()方法也不会真的关闭Connection,而是把Connection“归还”给池。
JDBC连接和连接池连接的区别
- JDBC连接
- 连接池连接
DBUtils工具类
DBUtils介绍
commons DBUtils 是apache组织提供的一个对JDBC简单封装的开源工具类库,简化JDBC应用程序的开发同时保证程序性能
核心功能
QueryRunner Classes提供操作sql的API
ResultSetHandler Classes,定义select操作后,如何封装结果集
DbUtils Classes
数据库批处理
批处理定义
- 批处理(batch) 操作数据库
- 批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
- 当向数据库中添加大量的数据时,需要用到批处理。
- 举例: 送货员的工作:
- 未使用批处理的时候,送货员每次只能运送 一件货物给商家;
- 使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户。
实现批处理方法
表和类之间的关系
可以将一个表看做一个类,把每一列看做是一个属性,每一个类创建的对象看做是表中的一行数据
Java Bean组件
通常在开发过程中使用JavaBean进行数据的封装,其有以下特点
- 需要实现序列化接口,Serializable
- 提供私有字段:private 类型 变量
- 提供getter和setter
- 提供空参构造
java项目分录分类
- entity通常用来保存封装数据的类,成员变量私有,提供get set 空参,继承序列化接口
- dao数据访问层
XML
XML的定义
可扩展标记语言
特点:
- 可扩展的,标签都是定义的
- 语法十分严格
XML的作用
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。