JDBC篇

1.1使用JDBC完成对于分类表的CRUD的操作
1.1.1需求
使用JDBC完成对分类表的添加,修改,删除,查询的操作.
1.1.2技术分析
JDBC的概念:
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
JDBC驱动:
JDBC(java database connectivity)驱动程序是对JDBC规范完整的实现,它的存在在JAVA程序与数据库系统之间建立了一条通信的渠道。
JDBC API常用的类
DriverManager:管理一组 JDBC 驱动程序的基本服务。
Connection:与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
PreparedStatement:表示预编译的 SQL 语句的对象。
ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
1.1.3步骤分析
步骤一:创建Java项目,引入mysql的驱动包.
步骤二:编写程序
步骤三:注册驱动
步骤四:获得连接serverTimezone=Asia/Shanghai
步骤五:执行SQL
步骤六:释放资源
1.1.4代码实现
1.2使用连接池改造JDBC的程序
1.2.1需求
提升程序运行的效率,采用连接池对JDBC的部分的效率进行提升.
1.2.2技术分析和实现
什么是连接池,为什么使用连接池?
Connection对象在JDBC使用的时候.使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了.每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优化.程序初始化的时候,初始化多个连接,将多个连接放入到池中(内存中).每次获取的时候,都可以直接从连接池中进行获取.使用结束以后,将连接归还到池中.
1.2.3自定义线程池
【连接池的原理】
在javax.sql.DataSource接口–连接池的接口
功能:初始化多个连接.把多个连接放入到内存中.
归还:将连接对象放回到内存中.
【自定义连接池】
见代码
【自定义连接池中问题】
1.创建连接池的时候能不能面向接口编程.
2.额外增加连接池的方法,那么程序员需要记住这些方法.能不能不额外去提供一些方法。比如调用close的方法自动的将Connection连接对象归还到连接池中。以下是几种解决方案:
1.继承的方法:继承的使用条件:能够控制这个类的构造.
2.装饰者模式:
装饰者模式的使用条件:
2.1增强的类和被增强的类实现相同的接口.
2.2在增强的类中能够获得被增强的类的引用.
接口中方法过多,只增强其中的一个方法.其他方法都需要原样调用原有方法.
3.动态代理:
JDK的动态代理使用条件:
被代理的对象必须实现接口.
1.2.4开源连接池
DBCP:是 apache 上的一个 java 连接池项目,也是 tomcat使用的连接池组件。dbcp没有自动回收空闲连接的功能
C3P0:连接池作者是《星球大战》迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool的单词字母,因此叫这个名字。c3p0有自动回收空闲连接功能
druid:阿里出品,淘宝和支付宝专用数据库连接池,支持所有JDBC兼容的数据库,包括Oracle、 MySql、Derby、Postgresql、SQL Server、H2等等,Druid针对Oracle和MySql做了特别优化。下载网址:http://repo1.maven.org/maven2/com/alibaba/druid/
DBCP c3p0 druid
驱动类名 driverClassName c3p0.driverClass driverClassName
URL url c3p0.jdbcUrl url
用户名 username c3p0.user username
密码 password c3p0.password password

使用开源连接池优化程序
DBCP连接池的使用:

C3P0连接池的使用:

Druid连接池的使用:

使用Druid改写了工具类

1.3使用元数据优化CRUD的操作
1.3.1需求
在DAO:Data Access Object中写CRUD的操作.很多代码都是重复性的.能不能抽取一个通用的增删改的方法,抽取一个通用的查询的方法?简化DAO的开发.
1.3.2分析分析和实现
抽取工具类的时候,尽量找一些一样东西.把其中不一样的地方抽取出来.一样地方保留即可.
【元数据MetaData】-用来编写框架或者通用性比较高的代码.
数据库元数据
DatabaseMetaData conn.getMetaData();
作用:
获得驱动信息(驱动类,用户名,url).
获得数据库中表信息及表中的主键的信息.
参数元数据
ParameterMetaData ps.getParameterMetaData();
作用:
获得SQL中的参数的个数.
获得SQL中的参数的类型. –MYSQL数据库有问题.bug
结果集元数据
ResultSetMetaData rs.getMetaData();
作用:
获得列的个数
获得列的名称
获得列的类型
【抽取通用的增删改的方法】

1.4开源DBUtils的使用
1.4.1DBUtils概述
DBUtils是java编程中的数据库操作实用工具,小巧简单实用,对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;对于数据表的写操作,也变得很简单(只需写sql语句)
1.4.2使用DBUtils步骤
1.配置属性文件
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/web02?serverTimezone=Asia/Shanghai
username=root
password=123456
2.创建QueryRunner 对象
DruidDataSource dds = new DruidDataSource();
dds.setDriverClassName(“com.mysql.cj.jdbc.Driver”);
dds.setUrl(“jdbc:mysql://localhost:3306/web02?serverTimezone=Asia/Shanghai”);
dds.setUsername(“root”);
dds.setPassword(“123456”);QueryRunner qr = new QueryRunner(dds);
1.4.3DBUtils常用类
DbUtils : 提供如关闭连接、装载 JDBC 驱动程序等常规工作的工具类;
QueryRunner : 该类简单化了 SQL 查询,它常与与 ResultSetHandler 组合在一起使用;
org.apache.commons.dbutils.handlers包下的常用类,如下所示:
1.ArrayHandler将ResultSet中第一行的数据转化成对象数组;
2.ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[];
3.BeanHandler将ResultSet中第一行的数据转化成类对象;
4.BeanListHandler将ResultSet中所有的数据转化成List,List中存放的是类对象;
5.ColumnListHandler将ResultSet中某一列的数据存成List,List中存放的是Object 对象;
6.KeyedHandler将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据;
7.MapHandler将ResultSet中第一行的数据存成Map映射;
8.MapListHandler将ResultSet中所有的数据存成List。List中存放的是Map;
9.ScalarHandler将ResultSet中一条记录的其中某一列的数据存成Object;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值