MySQL创建数据库连接池.docx

上传人:b****2 文档编号:2383558 上传时间:2022-10-29 格式:DOCX 页数:8 大小:17.07KB
下载 相关 举报
MySQL创建数据库连接池.docx_第1页
第1页 / 共8页
MySQL创建数据库连接池.docx_第2页
第2页 / 共8页
MySQL创建数据库连接池.docx_第3页
第3页 / 共8页
MySQL创建数据库连接池.docx_第4页
第4页 / 共8页
MySQL创建数据库连接池.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

MySQL创建数据库连接池.docx

《MySQL创建数据库连接池.docx》由会员分享,可在线阅读,更多相关《MySQL创建数据库连接池.docx(8页珍藏版)》请在冰豆网上搜索。

MySQL创建数据库连接池.docx

MySQL创建数据库连接池

 C3P0数据源

介绍

c3p0是一个开源的jdbc连接池,我们熟悉的Hibernate和Sprint框架使用的都是该数据源

 

创建连接池对象

方法1:

直接创建对象,设置参数

ComboPooledDataSourcecpds=newComboPooledDataSource();

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:

读取配置文件

ComboPooledDataSourcecpds=newComboPooledDataSource("itcast");

配置文件为c3p0-config.xml该文件需要放在类路径下

 

  

    

—-默认配置–->

     5

     15

     com.mysql.jdbc.Driver

     jdbc:

mysql:

//localhost:

3306/jdbc3

     root

     root

  

  

     5

     15

     com.mysql.jdbc.Driver

     jdbc:

mysql:

//localhost:

3306/jdbc3

     root

     root

  

 

三、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(Stringsql,Object[]params) throws SQLException{

  Connectionconn=null;

  PreparedStatementpstmt= null;

  ResultSetrs= null;

   try {

      // 获得连接

     conn=getConnection();

      // 预编译sql

     pstmt=conn.prepareStatement(sql);

      // 将参数设置进去

      for(int i=0; params!

=null&&i

         pstmt.setObject(i+1,params[i]);

     }

      // 发送sql

      int num=pstmt.executeUpdate();

      return num;

  } finally {

      // 释放资源

     release(conn,pstmt,rs);

  }

}

 

// 优化查询

public static Objectquery(Stringsql,Object[]params,ResultSetHandlerrsh) throws SQLException{

  Connectionconn=null;

  PreparedStatementpstmt= null;

  ResultSetrs= null;

   try {

      // 获得连接

     conn=getConnection();

      // 预编译sql

     pstmt=conn.prepareStatement(sql);

      // 将参数设置进去

      for(int i=0;params!

=null&&i

         pstmt.setObject(i+1,params[i]);

     }

      // 发送sql

     rs=pstmt.executeQuery();

      // 不知道别人想如何处理结果集

      // 干脆想别人所要一个结果集的处理器

      // 为了让当前代码继续,定义一个结果集处理器接口

      // 策略模式,规定算法,具体的算法留给将来的调用者实现

     Objectobj=rsh.handle(rs);

      return obj;

  } finally {

      // 释放资源

     release(conn,pstmt,rs);

  }

}

 

 

结果集处理器接口

publicinterfaceResultSetHandler{

  //处理结果集的方法

  publicObjecthandle(ResultSetrs);

}

 

实现类:

BeanListHandler

publicclassBeanListHandlerimplementsResultSetHandler{

 

  privateClassclazz;

  publicBeanListHandler(Classclazz){

     this.clazz=clazz;

  }

  publicObjecthandle(ResultSetrs){

     try{

         //取出结果集所有的记录,封装到bean,存入list返回

         Listlist=newArrayList();

         while(rs.next()){

            Objectbean=clazz.newInstance();

            //获得元数据

            ResultSetMetaDatametaData=rs.getMetaData();

            //获得列的数量

            intcount=metaData.getColumnCount();

            //遍历列

            for(inti=1;i<=count;i++){

               //取列名

               StringcolumnName=metaData.getColumnName(i);

               //取这列的值

               Objectvalue=rs.getObject(columnName);

               //反射出属性

               Fieldfield=clazz.getDeclaredField(columnName);

               //设置属性

               field.setAccessible(true);

               field.set(bean,value);

            }

            //加入list

            list.add(bean);

         }

         returnlist;

     }catch(Exceptione){

         thrownewRuntimeException(e);

     }

  }

 

}

 

BeanHandler

publicclassBeanHandlerimplementsResultSetHandler{

  privateClassclazz;

  publicBeanHandler(Classclazz){

     this.clazz=clazz;

  }

  publicObjecthandle(ResultSetrs){

     //不知道有几列数据,不知道列名,不知道封装到什么样的bean

     //表的列明和javabean的字段名一致

     try{

         if(rs.next()){

            //创建bean

            Objectbean=clazz.newInstance();

            //封装数据

            //获得结果集的元数据

            ResultSetMetaDatametaData=rs.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1