1.1概念
JDBC连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
1.2数据库连接池的好处
- 节约资源(不是关闭连接而是归还)
- 用户访问高效(直接获取连接对象,不用创建)
1.3实现:
标准接口:DataSource javax.sql包下的。方法:
- 获取连接:getConnection()
- 归还连接:Connection.close()。
如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接。
1.4实践
这篇文章我想从面向过程逐渐过渡到面向对象,通过代码一点一点的改变,感受一下从执行者变成指挥者的感觉。文章有点粗糙,如果你能手动敲完这几个版本,那么你的收获会很大!
JDBC的操作步骤:
- 加载数据库驱动程序
- 连接数据库
- 操作数据库
- 关闭数据库
第一个版本
从第一个版本到第三个版本都需要使用到mysql-connector-java-5.1.45-bin.jar这个jar包,步骤是**创建跟src同级目录lib,导入上述jar包,并添加到构建路径。
这里介绍1.0版本,首先是util配置层,注意一点!!!第10行的驱动路径,就是mysql.jdbc包下的Driver类,不是随便写的!配置过程是:
- 1定义连接数据库所需的数据值
- 2.加载驱动类
- 3.获取数据库连接对象。
这个过程中规中矩没有什么坑点。需要特别注意的是中间需要导包,导入的是Connection.sql下的包,导入其他的包就会报错,让你强转类型。
接下来是dao层的接口,这里接口定义了增删改查四个方法。
接下来是dao层中的实现类,它是实现了接口并对方法重写,大家认真看实现类图中的红色框框,发现这里的sql语句写死了,就是说我现在一个方法只能执行一条特定的sql语句,这代码显然不可用。而且此时查询方法查出来的数据是单一的,他们不是一个学生对象。这就是1.0版本。下面的2.0版本会对学生对象进行封装。
工具类
第10行的驱动路径,就是mysql.jdbc包下的Driver类,不是随便写的!
用于增删改查的接口
上面接口的实现类
第二个版本
这个版本解决了sql命令固定的问题,执行的命令和条件是由自己输入。这里的?是占位符号,占位符后面会替换。还封装了学生对象,查询时输出的就是一个个学生对象。可能大家觉得这很nice了。但是2.0版本还是可以优化的,大家可以看一下几个方法重复的打码挺多的,例如ResultSet,Statement,Connection对象的关闭,这些close方法可以封装优化。还有获取connection(数据库连接对象),获取执行sql命令的statement,执行命令是否也是一样呢。这些重复的代码可以考虑封装,第三个版本就是这么做的。
接口
学生类(JavaBean)
这里bean层的学生类就截图成员变量,下面的构造方法,get,set方法,toString方法自己脑补哈哈哈。
接口实现类
文章篇幅有点长,分成两篇了,大家可以看看JDBC连接池(下)