MySQL创建数据库连接池
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C3P0 数据源
介绍
c3p0是一个开源的jdbc连接池,我们熟悉的Hibernate和Sprint 框架使用的都是该数据源
创建连接池对象
方法1:直接创建对象,设置参数
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc3");
cpds.setUser("root");
cpds.setPassword("root");
cpds.setInitialPoolSize(5);
cpds.setMaxPoolSize(15);
方法2:读取配置文件
ComboPooledDataSource cpds = newComboPooledDataSource("itcast");
配置文件为c3p0-config.xml 该文件需要放在类路径下
三、ResultSetMetaData对象
元数据,可以理解为描述数据的数据
jdbc中的元数据是指数据库、表、列的定义信息
ResultSetMetaData对象表示结果集ResultSet对象的元数据
获得该对象:
ResultSetMetaDatametaData = rs.getMetaData();
常用方法:
getColumnCount() 返回resultset对象的列数
getColumnName(int column) 获得指定列的名称getColumnTypeName(int column) 获得指定列的类型
四、jdbc优化
使用jdbc对数据库进行crud操作时,会有很多重复的代码,仔细分析不难发现其实变化的只是其中几行代码
对于cud(增删改)操作,代码几乎完全一样,唯一的区别就是sql语句不同,我们完全可以把相同的代码抽取出来定义在一个工具方法中,然后定义一个参数来接收sql语句
对于r(查询)操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet结果集的处理也有所不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey 方法的调用者决定如何把ResultSet中的数据映射到实体对象中
优化后的工具类JdbcUtils
// 通用的增删改方法
public static int update(String sql, Object[]
params) throws SQLException {
Connection conn =null;
PreparedStatementpstmt = null;
ResultSet rs = null;
try {
// 获得连接
conn =getConnection();
// 预编译sql
pstmt =conn.prepareStatement(sql);
// 将参数设置进去
for(int i=0; params!=null&&i } // 发送sql int num = pstmt.executeUpdate(); return num; } finally { // 释放资源 release(conn,pstmt, rs); } } // 优化查询