一.JDBC
1.JDBC的概念: (掌握)
(1)数据库驱动: 数据库厂商提供的用来操作数据库的jar包
(2)JDBC: 由于不同的数据库厂商提供的数据库驱动各不相同,导致开发人员的学习成本十分的高,于是sun公司提供了一套用来统一访问数据库的标准,其实就是一大堆的接口, 各个数据库厂商设计的jar包都实现了这套接口, 因此开发人员只需要学会这套接口,所有的数据库驱动就都会使用了.
(3)JDBC目前已经被加入到了javase的技术范畴,这意味着一个基本的java工程就具有JDBC相关的jar包(java.sql/javax.sql).
注意: jdbc只是一套接口,具体操作数据库的代码都在接口的实现类中,也就是数据库驱动中,开发时还是要导入具体的数据库驱动.
2.六个步骤实现通过JDBC操作数据库 (!!掌握)
//1.注册数据库驱动
//2.获取数据库连接
//3.获取传输器对象
//4.利用传输器传输SQL到数据库执行,获取结果集对象
//5.遍历结果集,获取结果数据
//6.关闭资源
3.JDBC的增删改查(略) (!!掌握)
4.PreparedStatement (!!掌握)
Sql注入攻击: 由于后台的sql语句是拼接而来的, 其中的参数是用户提交的, 如果用户在参数中添加了一些sql关键字或者是特殊字符, 就可能改变sql语句的原意, 从而执行意外的操作
PreparedStatement优点:
(1)可以防止sql注入攻击, 采用预编译机制, 先将sql语句的主干发送数据库, 数据库编译后就确定了sql语句语意, 如果后面再传参数, 参数就只能包含参数值, 不能再包含sql关键字或者是特殊字符, 如果有也只会当作普通的字符来处理!!!
(2)通过方法来设置参数, 省去了拼接sql语句的麻烦
(3)能够尽最大可能来提高效率. PreparedStatement发送的sql语句编译后就被数据库缓存下来了, 再次执行时, 如果和缓存中的匹配就会使用缓存中的语句, 不再编译, 直接执行. statement发送的sql语句是先拼接好再发送给数据库, 由于参数不同整条sql语句也就不同, 所以每次都需要编译.
二.批处理 (掌握)
如果有大量的sql语句要到数据库执行, 如果一条一条发送, 有多少条就要发送多少次, 效率低下.
可以将这些sql语句打成一个批, 一次性发送给数据库, 数据库收到后打开批, 依次执行, 减少了发送sql语句次数, 从而提高程序执行的效率.
Statement方式来实现批处理
优点:
可以包含结构不同的sql语句
缺点:
不能防止sql注入攻击
没有预编译机制, 效率低下
如果发送的sql语句主干部分相同, 主干部分每次都需要写.
PreparedStatement方式实现批处理
优点:
可以防止sql注入攻击
采用预编译机制, 效率高
如果发送的sql语句主干部分相同, 主干部分只需要写一次, 每次发送的只是参数部分.
缺点:
包含的sql语句的主干部分必须相同
三.连接池
1.自定义连接池 (!!重要)
对一个方法进行改造:
(1)继承 -- 不能对已有的对象上的方法进行改造
定义一个类继承被改造者所属的类, 在子类中覆盖父类中的方法来实现方法的改造
(2)装饰设计模式
如果需要对已有对象上的方法进行改造, 可以定义类将被装饰者传入, 基于已有的功能, 添加更强的功能
那么这个自定义的类就是装饰类. 装饰类通常会提供构造函数将被装饰者传入, 并保存在类的内部, 基于已有对象上的功能, 添加更强的功能
实现步骤:
a) 定义装饰类, 装饰类要求和被装饰者所属的类实现相同的接口或者是继承相同的类
b) 在装饰类中, 通过构造方法将被装饰者传入, 保存在类的内部
c) 对于不想改造的方法, 直接调用已有对象上的方法, 对于想要改造的方法进行改造
2.开源数据库连接池 (!!掌握)
C3P0连接池
导入开发包
创建数据库连接池
ComboPooledDataSource cpds = new ComboPooledDataSource();
配置基本的连接信息
a) 通过setters方法来设置参数
b) 通过c3p0-config.xml文件来配置基本连接信息
c) 通过c3p0.properties文件来配置基本连接信息
1.JDBC的概念: (掌握)
(1)数据库驱动: 数据库厂商提供的用来操作数据库的jar包
(2)JDBC: 由于不同的数据库厂商提供的数据库驱动各不相同,导致开发人员的学习成本十分的高,于是sun公司提供了一套用来统一访问数据库的标准,其实就是一大堆的接口, 各个数据库厂商设计的jar包都实现了这套接口, 因此开发人员只需要学会这套接口,所有的数据库驱动就都会使用了.
(3)JDBC目前已经被加入到了javase的技术范畴,这意味着一个基本的java工程就具有JDBC相关的jar包(java.sql/javax.sql).
注意: jdbc只是一套接口,具体操作数据库的代码都在接口的实现类中,也就是数据库驱动中,开发时还是要导入具体的数据库驱动.
2.六个步骤实现通过JDBC操作数据库 (!!掌握)
//1.注册数据库驱动
//2.获取数据库连接
//3.获取传输器对象
//4.利用传输器传输SQL到数据库执行,获取结果集对象
//5.遍历结果集,获取结果数据
//6.关闭资源
3.JDBC的增删改查(略) (!!掌握)
4.PreparedStatement (!!掌握)
Sql注入攻击: 由于后台的sql语句是拼接而来的, 其中的参数是用户提交的, 如果用户在参数中添加了一些sql关键字或者是特殊字符, 就可能改变sql语句的原意, 从而执行意外的操作
PreparedStatement优点:
(1)可以防止sql注入攻击, 采用预编译机制, 先将sql语句的主干发送数据库, 数据库编译后就确定了sql语句语意, 如果后面再传参数, 参数就只能包含参数值, 不能再包含sql关键字或者是特殊字符, 如果有也只会当作普通的字符来处理!!!
(2)通过方法来设置参数, 省去了拼接sql语句的麻烦
(3)能够尽最大可能来提高效率. PreparedStatement发送的sql语句编译后就被数据库缓存下来了, 再次执行时, 如果和缓存中的匹配就会使用缓存中的语句, 不再编译, 直接执行. statement发送的sql语句是先拼接好再发送给数据库, 由于参数不同整条sql语句也就不同, 所以每次都需要编译.
二.批处理 (掌握)
如果有大量的sql语句要到数据库执行, 如果一条一条发送, 有多少条就要发送多少次, 效率低下.
可以将这些sql语句打成一个批, 一次性发送给数据库, 数据库收到后打开批, 依次执行, 减少了发送sql语句次数, 从而提高程序执行的效率.
Statement方式来实现批处理
优点:
可以包含结构不同的sql语句
缺点:
不能防止sql注入攻击
没有预编译机制, 效率低下
如果发送的sql语句主干部分相同, 主干部分每次都需要写.
PreparedStatement方式实现批处理
优点:
可以防止sql注入攻击
采用预编译机制, 效率高
如果发送的sql语句主干部分相同, 主干部分只需要写一次, 每次发送的只是参数部分.
缺点:
包含的sql语句的主干部分必须相同
三.连接池
1.自定义连接池 (!!重要)
对一个方法进行改造:
(1)继承 -- 不能对已有的对象上的方法进行改造
定义一个类继承被改造者所属的类, 在子类中覆盖父类中的方法来实现方法的改造
(2)装饰设计模式
如果需要对已有对象上的方法进行改造, 可以定义类将被装饰者传入, 基于已有的功能, 添加更强的功能
那么这个自定义的类就是装饰类. 装饰类通常会提供构造函数将被装饰者传入, 并保存在类的内部, 基于已有对象上的功能, 添加更强的功能
实现步骤:
a) 定义装饰类, 装饰类要求和被装饰者所属的类实现相同的接口或者是继承相同的类
b) 在装饰类中, 通过构造方法将被装饰者传入, 保存在类的内部
c) 对于不想改造的方法, 直接调用已有对象上的方法, 对于想要改造的方法进行改造
2.开源数据库连接池 (!!掌握)
C3P0连接池
导入开发包
创建数据库连接池
ComboPooledDataSource cpds = new ComboPooledDataSource();
配置基本的连接信息
a) 通过setters方法来设置参数
b) 通过c3p0-config.xml文件来配置基本连接信息
c) 通过c3p0.properties文件来配置基本连接信息