1.前一天重点内容复习
jdbc使用PreparedStatement预编译对象的步骤
封装JdbcUtils类作为工具类,获得连接对象
准备参数化sql语句
获取预编译对象,将参数化sql语句传入数据库中
给sql语句参数赋值
执行sql语句
PreparedStatement和Statement对象的区别
1.Statement执行效率低,PreparedStatement执行效率高,因为前者执行的是静态sql语句,只能一条一条sql语句的发送给数据库执行,后者执行参数化sql语句,sql语句在数据库中等待参数完整,参数一旦完整即可执行,不需要一条一条的发。
2.Statement会出现sql注入现象,PreparedStatement不会出现,因为前者执行sql语句时,因为都是静态sql语句,有可能出现字符串拼接现象,不安全,但是参数化sql语句不存在这种问题
如何理解反射
反射就是在类从源码到编译阶段的class文件再到运行这个过程中,通过在编译阶段拿到该类的字节码文件对象来访问该类的构造方法,成员方法,成员变量的一种方式,比起从源文件来访问改类的构造方法,成员方法和成员变量,方式更直接,功能更加强大。
ResultSet结果集获取数据表的方式有哪些
直接方式:
数据类型 get数据类型(列的索引值);
数据类型 get数据类型(列的名称);
间接方式:
ResultSetMetaData getMetaData():获取结果集的元数据信息
int getColumnCount();:获取结果集列的行数
String getColumnName(int column);:参数时列的索引值,获取列索引值对应的列名称
2.数据库连接池
意义:分配、管理、释放连接对象,允许连接对象可以被多次重复利用
种类:
c3p0
两种实现方式:
1.src下面提供配置文件,名称必须为c3p0-config.xml(里面存放数据库信息)
2.src下面提供配置文件,c3p0.properties(里面存放数据库信息)
dbcp
druid(德鲁伊):不仅可以作为连接池,还可以SQL Parser解析工具(解析sql语句)
使用步骤:
1.导包
druid包:提供数据库连接池
mysql包:提供数据库连接
junit包及依赖包:提供单元测试
2.准备好druid配置文件
XXX.properties
参数为driverClassName、url、username、password
3.获取连接对象方法
DruidDataSource实现了DataSource的Connection接口
借助DruidDataSourceFactory工厂类来创建数据源对象
public static DataSource createDataSource(Properties properties)
底层调用:createDataSource(Map map)
3.连接池操作数据库和传统方式操作数据库区别
连接池创建一些固定的可重复使用的连接对象,使用完连接对象之后,将其归还给连接池,等待下一次使用
传统方式每一次都需要创建新的连接,使用完毕之后又要释放,非常浪费资源
4.ThreadLocal
jdk提供这个类,就是让每一个线程都使用自己的连接对象ThreadLocal<Connection>
功能:
set(T):将指定连接对象绑定到当前线程
get(T):从线程中取出对象
remove(T):将线程对象从线程中解绑
5.dbutils
意义:对原生jdbc的操作进行简易封装
操作步骤:
导入dbutils包
创建QueryRunner对象
public QueryRunner(DataSource ds):参数为数据源对象,自动提交模式
public QueryRunner():手动提交模式
准备参数化sql语句
QueryRunner对象执行sql语句
public int update(String sql,Object、、、、params);:添加,删除,修改sql语句
参数1为参数化sql语句
参数2为给占位符赋值的实际参数
public<T> t query(String sql,ResultSetHandler<T> rsh, Object、、、params)
参数1为参数化sql语句
参数2为接口,ResultSetHandler:针对查询结果集数据表进行处理
子实现类
BeanListHandler<T>:将查询的每一条记录封装到T中,然后结果的多条记录封装到List<T>集合中
BeanHandler<T>:将查询的一条记录封装到T中,返回当前T
ScalarHandler<T>:查询单行单列数据封装到Object中
参数3为sql的实际参数