您好,欢迎访问一九零五行业门户网

C3P0连接池的详细介绍

c3p0连接池
创建c3p0连接池的工具类
* 连接的规范接口:
* javax.sql.datasource接口
* 接口的实现类对象
* combopooleddatasource
* 成员位置创建combopooleddatasource对象
* 使用静态代码块给combopooleddatasource设置4大数据量连接信息
* 创建一个静态方法返回connection对象
* 创建一个静态方法释放资源
 1 public class c3p0utils { 2     //成员位置创建combopooleddatasource对象 3     private static combopooleddatasource datasource = new combopooleddatasource(); 4      5     //使用静态代码块给combopooleddatasource设置4大数据量连接信息 6     static{ 7         try { 8             datasource.setdriverclass(com.mysql.jdbc.driver); 9             datasource.setjdbcurl(jdbc:mysql://localhost:3306/mybase4);10             datasource.setuser(root);11             datasource.setpassword(root);12         } catch (exception e) {13             throw new runtimeexception(设置连接信息失败!);14         }15     }16     17     //创建一个静态方法返回connection对象18     public static connection getconnection(){19         try {20             return datasource.getconnection();21         } catch (sqlexception e) {22             throw new runtimeexception(获取数据库连接信息失败!);23         }24     }25     26     //定义一个释放资源的方法27         public static void close(resultset rs,statement stat,connection conn){28             if(rs!=null){29                 try {30                     rs.close();31                 } catch (sqlexception e) {32                     e.printstacktrace();33                 }34             }35             if(stat !=null){36                 try {37                     stat.close();38                 } catch (sqlexception e) {39                     e.printstacktrace();40                 }41             }42             if(conn != null){43                 try {44                     conn.close();45                 } catch (sqlexception e) {46                     e.printstacktrace();47                 }48             }49         }50 }
创建读取xml配置文件的c3p0工具类
 1 public class c3p0utilsreadxml { 2     //成员位置创建combopooleddatasource对象 3     private static combopooleddatasource datasource = new combopooleddatasource(); 4      5     //使用静态代码块给combopooleddatasource设置4大数据量连接信息 6     /*static{ 7         try { 8             datasource.setdriverclass(com.mysql.jdbc.driver); 9             datasource.setjdbcurl(jdbc:mysql://localhost:3306/mybase4);10             datasource.setuser(root);11             datasource.setpassword(root);12         } catch (exception e) {13             throw new runtimeexception(设置连接信息失败!);14         }15     }*/16     17     //创建一个返回combopooleddatasource的方法18     public static datasource getdatasource(){19         return datasource;20     }21     22     //创建一个静态方法返回connection对象23     public static connection getconnection(){24         try {25             return datasource.getconnection();26         } catch (sqlexception e) {27             throw new runtimeexception(获取数据库连接信息失败!);28         }29     }30     31     //定义一个释放资源的方法32         public static void close(resultset rs,statement stat,connection conn){33             if(rs!=null){34                 try {35                     rs.close();36                 } catch (sqlexception e) {37                     e.printstacktrace();38                 }39             }40             if(stat !=null){41                 try {42                     stat.close();43                 } catch (sqlexception e) {44                     e.printstacktrace();45                 }46             }47             if(conn != null){48                 try {49                     conn.close();50                 } catch (sqlexception e) {51                     e.printstacktrace();52                 }53             }54         }55 }
dbcp连接池
创建dbcp连接池的工具类
* 连接的规范接口:
* javax.sql.datasource接口
* 接口的实现类对象
*   basicdatasource
*  重写getconnection方法
 1 public class dbcputils { 2     //创建连接池的实现类对象 3     private static basicdatasource datasource = new basicdatasource(); 4      5     //设置连接数据库的4大变量,使用basicdatasource中的set方法设置 6     static{ 7         //设置注册的驱动信息 8         datasource.setdriverclassname(com.mysql.jdbc.driver); 9         //设置url10         datasource.seturl(jdbc:mysql://localhost:3306/mybase4);11         //设置用户名12         datasource.setusername(root);13         //设置密码14         datasource.setpassword(root);15         //可选信息16         //datasource.setinitialsize(100);17         //datasource.setmaxactive(1000);18     }19     20     //创建获取数据库连接对象的方法21     public static connection getconnection(){22         try {23             return datasource.getconnection();24         } catch (sqlexception e) {25             throw new runtimeexception(获取数据库连接对象失败);26         }27     }28     29     //定义一个释放资源的方法30     public static void  close(resultset rs,statement stat,connection conn){31         if(rs!=null){32             try {33                 rs.close();34             } catch (sqlexception e) {35                 e.printstacktrace();36             }37         }38         if(stat !=null){39             try {40                 stat.close();41             } catch (sqlexception e) {42                 e.printstacktrace();43             }44         }45         if(conn != null){46             try {47                 conn.close();48             } catch (sqlexception e) {49                 e.printstacktrace();50             }51         }52     }53 }
读取配置文件的方式
 1 /* 2  * 创建dbcp连接池工具类 3  * 使用读取配置文件的方式 4  * dbcp中有一个工厂类basicdatasourcefactory 5  * 工厂类中有一个静态方法 6  * static datasource createdatasource(properties prop) 7  * 此方法返回的就是datasource接口的实现类对象basicdatasource 8  *   9  * 创建propertis集合+io技术读取配置文件10  * 把配置文件传入basicdatasourcefactory静态方法createdatasource中11  */12 public class dbcputilsreadconfig {13     //创建datasource变量14     private static datasource datasource;15     16     static{17         try {18             //创建propertis集合+io技术读取配置文件19             //使用类加载器,扫描包下的文件20             inputstream is = dbcputilsreadconfig.class.getclassloader()21                     .getresourceasstream(dbcpconfig.properties);22             //创建propertis集合23             properties prop = new properties();24             prop.load(is);25             //把配置文件传入basicdatasourcefactory静态方法createdatasource中26             datasource = basicdatasourcefactory.createdatasource(prop);27         } catch (exception e) {28             throw new runtimeexception(读取配置文件失败);29         }30     }31     32     //创建获取数据库连接对象的方法33     public static connection getconnection(){34         try {35             return datasource.getconnection();36         } catch (sqlexception e) {37             throw new runtimeexception(获取数据库连接对象失败);38         }39     }40     41     //定义一个释放资源的方法42     public static void  close(resultset rs,statement stat,connection conn){43         if(rs!=null){44             try {45                 rs.close();46             } catch (sqlexception e) {47                 e.printstacktrace();48             }49         }50         if(stat !=null){51             try {52                 stat.close();53             } catch (sqlexception e) {54                 e.printstacktrace();55             }56         }57         if(conn != null){58             try {59                 conn.close();60             } catch (sqlexception e) {61                 e.printstacktrace();62             }63         }64     }65 }
* 使用dbutils工具类对数据库表进行增删改查
* dbutils工具类作用:简化jdbc的开发(6步)
*
* dbutils有3个核心类
* 1.queryrunner:使用queryrunner中的方法对数据库进行增删改查
* 2.dbutils:提供了大量的释放资源的方法
* 3.resultsethandler接口:提供了处理查询结果集的方法
*
* queryrunner类
* 构造方法:
* queryrunner() 空参数构造方法
* 调用更新和查询方法的时候,需要传入connection对象
* queryrunner(datasource ds) 带datasource数据库连接池的构造方法
* 调用更新和查询方法的时候queryrunner会自动从datasource实现类对象中获取数据库连接对象,使用完毕会自动归还
* 成员方法:
* 执行执行增删改的成员方法
* int update(connection conn, string sql, object... params)用来执行增删改的sql
* int update(string sql, object... params) 用来执行增删改的sql
* 参数:
* connection conn:数据库连接对象
* string sql:拼接的sql语句,可以使用?占位符
* object... params:?占位符的实际参数,可以使用object[]
* 返回值:
* int:执行的有效行数
* 执行执行查询的成员方法
* <t> t query(connection conn, string sql, resultsethandler<t> rsh, object... params)
* <t> t query(string sql, resultsethandler<t> rsh, object... params)
* 参数:
* connection conn:数据库连接对象
* string sql:拼接的sql语句,可以使用?占位符
* object... params:?占位符的实际参数,可以使用object[]
* resultsethandler<t> rsh:用来存储查询之后的结果集,可以传入resultsethandler9种实现类对象
* 返回值:
* <t> t:传入的resultsethandler实现类不同,返回的结果集也不同,使用泛型,传入什么结果集,就返回对应的类型
1 public class demo01dbutils { 2     //创建queryrunner对象,构造方法中传入连接池的实现类对象 3     queryrunner qr = new queryrunner(c3p0utilsreadxml.getdatasource()); 4      5     /* 6      * 使用queryrunner,对数据库表进行删除数据 7      */ 8     @test 9     public void delete(){10         try {11             //拼接增加的sql语句12             string sql = delete from category where cid=?;13             //调用queryrunner中update方法执行sql语句14             //创建对象数据,储存?占位符的实际参数15             //object[] parmars = {洗,10};16             int row = qr.update(sql, 7);17             system.out.println(row);18         } catch (exception e) {19             system.out.println(e);20         }21     }22     23     /*24      * 使用queryrunner,对数据库表进行修改数据25      */26     @test27     public void update(){28         try {29             //拼接增加的sql语句30             string sql = update category set cname=? where cid=?;31             //调用queryrunner中update方法执行sql语句32             //创建对象数据,储存?占位符的实际参数33             object[] parmars = {洗,10};34             int row = qr.update(sql, parmars);35             system.out.println(row);36         } catch (exception e) {37             system.out.println(e);38         }39     }40     41     /*42      * 使用queryrunner,对数据库表进行增加(插入)数据43      */44     @test45     public void insert(){46         try {47             //拼接增加的sql语句48             string sql = insert into category(cname) values(?);49             //调用queryrunner中update方法执行sql语句50             int row = qr.update(sql, 玩具);51             system.out.println(row);52         } catch (exception e) {53             system.out.println(e);54         }55     }56 }
使用queryrunner对数据库表进行查询的九种查询方式
  1 /*  2  * 使用queryrunner对数据库表进行查询  3  * <t> t query(string sql, resultsethandler<t> rsh, object... params)       4  */  5 public class demo02dbutils {  6     //创建queryrunner对象,构造方法中传入数据库连接池的实现类  7     queryrunner qr = new queryrunner(c3p0utilsreadxml.getdatasource());  8       9     /* 10      * 第九种查询方式:使用keyedhandler(map嵌套map) 11      * keyedhandler会把结果集的每一行数据封装到map集合中 12      *     key:字符串类型列名 13      *     value:列名对应的值(不同的列,数据类型不同,value使用object类型) 14      * 多个map集合存储到另外一个map集合中 15      *     key:指定的字符串列名,不指定则默认使用第一列 16      *     value:传入存储每行数据的map集合 17      *   18      * 构造方法: 19      *     keyedhandler() 不指定列名 20      *     keyedhandler(int columnindex) 指定列号1,2,3,4 21      *     keyedhandler(string columnname) 指定字符串格式列名 22      */ 23     @test 24     public void keyedhandler(){ 25         try { 26             //拼接sql语句 27             string sql = select * from category; 28             //调用queryrunner中的query方法,结果集使用keyedhandler 29             //map<object,map<string,object>> mapmap = qr.query(sql, new keyedhandler(cid)); 30             map<object,map<string,object>> mapmap = qr.query(sql, new keyedhandler(cname)); 31             //遍历map集合取出存储每一行数据的map集合 32             for (object obj: mapmap.keyset()) { 33                 //根据key取出值存储每一行数据的map集合 34                 map<string,object> map = mapmap.get(obj); 35                 //遍历map集合 36                 for(string key : map.keyset()){ 37                     system.out.print(obj+:+key+...+map.get(key)+\t); 38                 } 39                 //打印完每一行数据之后换行 40                 system.out.println(); 41             } 42         } catch (exception e) { 43             system.out.println(e); 44         } 45     } 46      47     /* 48      * 第八种查询方式:使用scalarhandler(重点) 49      * scalarhandler用于执行返回单个数据的sql语句 50      * 使用聚合函数查询的结果都是单个数据 51      * 或者查询某一行的某一个字段 52      */ 53     @test 54     public void scalarhandler(){ 55         try { 56             //拼接sql语句 57             string sql = select sum(cid) from category; 58             sql = select cname from category where cid=?; 59             //调用queryrunner中的query方法,结果集使用scalarhander 60             //返回的值的数据类型不确定,使用object类型 61             object obj = qr.query(sql, new scalarhandler(),2); 62             system.out.println(obj); 63         } catch (exception e) { 64             system.out.println(e); 65         } 66     } 67      68     /* 69      * 第七种查询方式:使用maplisthandler 70      * 1.maplisthandler会把多条数据,存储到多个map集合中 71      *     key:字符串类型列名 72      *     value:列名对应的值(不同的列,数据类型不同,value使用object类型) 73      * 2.会把多个map集合存储list集合中 74      */ 75     @test 76     public void maplisthandler(){ 77         try { 78             //拼接查询sql语句 79             string sql = select * from category; 80             //调用queryrunner中的query方法执行查询sql语句,结果集传入maplisthandler 81             list list = qr.query(sql, new maplisthandler()); 82             //遍历list集合,取出map集合 83             for (map<string, object> map : list) { 84                 //遍历map集合 85                 for(string key: map.keyset()){ 86                     system.out.print(key+...+map.get(key)+\t); 87                 } 88                 system.out.println();//打印完每行数据之后换行 89             } 90         } catch (exception e) { 91             system.out.println(e); 92         } 93     } 94      95     /* 96      * 第六种查询方式:使用maphandler 97      * maphandler把结果集的第一行数据存储map集合中 98      *     key:字符串类型列名 99      *     value:列名对应的值(不同的列,数据类型不同,value使用object类型)100      */101     @test102     public void maphandler(){103         try {104             //拼接查询sql语句105             string sql = select * from category;106             //调用queryrunner中的query方法执行查询sql语句,结果集传入maphandler107             map<string,object> map = qr.query(sql, new maphandler());108             //使用keyset遍历map集合109             set<string> set = map.keyset();110             for (string key : set) {111                 //通过key使用get方法获取value112                 object value = map.get(key);113                 system.out.print(key+...+value+ );114             }115         } catch (exception e) {116             system.out.println(e);117         }118     }119     120 121     /*122      * 第五种查询方式:使用columnlisthandler123      * columnlisthandler会把结果集中指定列的数据封装到一个list集合中124      * 如果不指定列,则默认使用第一列数据存储到list集合中125      * columnlisthandler()  126      * columnlisthandler(int columnindex) 列号1,2,3,4127      * columnlisthandler(string columnname) 列名128      */129     @test130     public void columnlisthandler(){131         try {132             //拼接查询sql语句133             string sql = select * from category;134             //调用queryrunner中的query方法执行查询sql语句,结果集传入columnlisthandler135             //返回一个list集合,因为列的数据类型不同,所有元素使用object类型136             list<object> list = qr.query(sql, new columnlisthandler(cname));137             for (object object : list) {138                 system.out.println(object);139             }140         } catch (exception e) {141             system.out.println(e);142         }143     }144     145     /*146      * 第四种查询方式:使用beanlisthandler(重点)147      * beanlisthandler会把多个条数据封装到多个javabean对象中148      * 多个javabean对象存储到list集合中149      *  150      * 注意:151      *      javabean中必须有空参数构造方法152      */153     @test154     public void beanlisthandler(){155         try {156             //拼接查询sql语句157             string sql = select * from category;158             //调用queryrunner中的query方法执行查询sql语句,结果集传入beanlisthandler159             list<category> list = qr.query(sql, new beanlisthandler<>(category.class));160             //遍历存储category的list集合161             for (category category : list) {162                 system.out.println(category);163             }164         } catch (exception e) {165             system.out.println(e);166         }167     }168     169     /*170      * 第三种查询方式:使用beanhandler(重点)171      * beanhandler会把结果集的第一条数据,封装到指定的javabean对象中172      * 构造方法:173      *     beanhandler(class<t> type) 传递javabean对象的class文件对象174      *         beanhandler内部会根据传递的class文件对象使用反射技术创建javabean对象,把查询的结果集中第一行数据存储到javabean中175      *     相当于176      *         category c = new category();177      *         c.setxxx(xxx);178      *         c.setxxx(xxx);179      *         c.setxxx(xxx);180      *  注意:181      *      javabean中必须有空参数构造方法182      */183     @test184     public void beanhandler(){185         try {186             //拼接查询sql语句187             string sql = select * from category;188             //调用queryrunner中的query方法执行查询sql语句,结果集传入beanhandler189             category cate = qr.query(sql, new beanhandler<>(category.class));190             system.out.println(cate);191         } catch (exception e) {192             system.out.println(e);193         }194     }195     196     /*197      * 第二种查询方式:使用arraylisthandler198      * arraylisthandler中会把多条结果封装到多个对象数组中199      * 一个对象数组封装一行数据200      * 多个对象数组需要存储到list集合中201      */202     @test203     public void arrraylisthandler(){204         try {205             //拼接查询sql语句206             string sql = select * from category where cid = ?;207             sql = select * from category where cid in(?,?);208             //调用queryrunner中的query方法执行查询sql语句,传入arraylisthandler结果集209             list<object[]> list = qr.query(sql, new arraylisthandler(), 1,3);210             //遍历集合211             for (object[] objects : list) {212                 //遍历对象数组213                 for (object obj : objects) {214                     system.out.print(obj+ );215                 }216                 system.out.println();//换行217             }218         } catch (exception e) {219             system.out.println(e);220         }221     }222     223     /*224      * 第一种查询方式:使用arrayhandler225      * arrayhandler会把结果集第一条数据封装到一个对象(object)数组中226      * 数组中的每一个元素,就是第一条数据数据的每一列的值227      */228     @test229     public void arrayhandler(){230         try {231             //拼接查询sql语句232             string sql = select * from category;233             //调用queryrunner中的query方法执行查询sql语句,传入arrayhandler结果集234             object[] objs = qr.query(sql, new arrayhandler());235             //遍历数组236             for (object obj : objs) {237                 system.out.print(obj+ );238             }239         } catch (exception e) {240             system.out.println(e);241         }242     }243 }
以上就是c3p0连接池的详细介绍的详细内容。
其它类似信息

推荐信息