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连接池的详细介绍的详细内容。