Java--JavaWeb使用commons-dbutils简化数据库操作

来源:互联网 发布:医疗数据公司 编辑:程序博客网 时间:2024/05/21 16:38

具体实现步骤:

1,使用C3P0连接池--这里使用在src根目录下创建名为c3p0-config.xml的文件。

<?xml version="1.0" encoding="UTF-8"?><c3p0-config><!-- 这是默认配置信息 --><default-config> <!-- 连接四大参数配置 --><property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="user">root</property><property name="password">123</property><!-- 池参数配置 --><property name="acquireIncrement">3</property><property name="initialPoolSize">10</property><property name="minPoolSize">2</property><property name="maxPoolSize">10</property></default-config><!-- 专门为oracle提供的配置信息 --><named-config name="oracle-config"> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="user">root</property><property name="password">123</property><property name="acquireIncrement">3</property><property name="initialPoolSize">10</property><property name="minPoolSize">2</property><property name="maxPoolSize">10</property></named-config></c3p0-config>
2.新建一个JDBCUtils类,为其他类提供数据库连接对象或者数据库连接池(在QueryRunner中会用到数据库连接池)
package com.c3p0.jdbc;import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;/** * 注意必须使用c3p0-config.xml的配置方式。将c3p0-config.xml文件放在src根目录下。 * 默认配置。 *  * */public class JDBCUtils {private static ComboPooledDataSource ds=new ComboPooledDataSource();/** * 使用连接池返回一个连接对象 * */public static Connection getConnection() throws SQLException{return ds.getConnection();}/** * 返回一个连接池对象。 *  * */public static DataSource getDataSource(){return ds;}}
3.编写操作数据库的类
package com.c3p0.demo1;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.junit.Test;import com.c3p0.jdbc.JDBCUtils;public class Demo2 {/** * 查询记录 * @throws SQLException  *  * */@Testpublic void fun1() throws SQLException{//创建QueryRunner,需要提供数据库连接池;QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());//给出sql模板String sql="select * from tb_stu where number=?";//给出参数Object[] params={"stu_001"};//执行Query,需要给出结果集处理器,即ResultHandler的实现类对象//我们给的是BeanHandler,他实现了ResultSetHandler//它需要一个类型,然后他会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean.Stu stu=qr.query(sql, new BeanHandler<Stu>(Stu.class),params);System.out.println(stu);}/** * 插入新的一条记录 * @throws SQLException  *  * */@Testpublic void fun2() throws SQLException{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="insert into tb_stu values(?,?,?,?,?)";Object[] params={"stu_003","wangwu",20,"female","dancing"};int count=qr.update(sql, params);System.out.println("count:"+count);}}

另外,还用到了JavaBean对象Stu
package com.c3p0.demo1;public class Stu {private String number;private String name;private int age;private String gender;private String hobby;public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}public Stu(String number, String name, int age, String gender, String hobby) {this.number = number;this.name = name;this.age = age;this.gender = gender;this.hobby = hobby;}public Stu() {super();// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "Stu [number=" + number + ", name=" + name + ", age=" + age+ ", gender=" + gender + ", hobby=" + hobby + "]";}}

使用这种方式:

(1)将增删改操作简化了,即同时使用一个模板即可,只需修改sql语句和参数即可;

(2)查询结果直接可以通过ResultSetHandler的实现类封装成JavaBean对象。

解析common-dbutils.jar:

QueryRunner对象

方法:

update方法:

--》int update(String sql,Object... params):可执行增删改语句

Query方法(泛型):

--》T Query(String sql,ResultSetHandler rsh,Object...params):可执行查询

他会先得到ResultSet,然后调用rsh的handle()把rs转换成需要的类型!

ResultSetHandler接口的实现类:

(1)BeanHandler(单行)--》构造器需要一个Class类型的参数,用来把一行结果转换成指定类型的JavaBean对象;

(2)BeanListHandler(多行)--》构造器也是需要一个Class类型的参数,用来把一行结果集转换成一个javaBean,那么多行就是多个JavaBean对象,组合成一个List对象。

(3)MapHandler(单行)把一行结果及转换成Map对象

例如:一行记录为
sid  sname  age  gender

001   zhangsan  20  male

那么转换成Map就是:

{sid:001,sname:zhangan,age:20,gender:male}

(4)MapListHandler(多行)--》把一行记录用一个Map装起来,那么多航记录就是多个Map,即List<Map>

(5)ScalarHandler(单行单列)--》通常用于select count(*)from tb_stu语句。结果集是单行单列的,返回一个object。

package com.c3p0.demo1;import java.sql.SQLException;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.MapHandler;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;import org.junit.Test;import com.c3p0.jdbc.JDBCUtils;public class Demo2 {/** * 查询记录 * @throws SQLException  * 单行结果集处理器: * (1)BeanHandler单行结果集处理器。 * (2)MapHandler单行结果集处理器 * */@Testpublic void fun1() throws SQLException{//创建QueryRunner,需要提供数据库连接池;QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());//给出sql模板String sql="select * from tb_stu where number=?";//给出参数Object[] params={"stu_001"};//执行Query,需要给出结果集处理器,即ResultHandler的实现类对象//我们给的是BeanHandler,他实现了ResultSetHandler//它需要一个类型,然后他会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean.Stu stu=qr.query(sql, new BeanHandler<Stu>(Stu.class),params);//(1)使用BeanHandler单行结果集处理器。Map map=qr.query(sql, new MapHandler(),params);//(2)使用MapHandler单行结果集处理器System.out.println(map);}/** * 查询记录 * 结果集多行处理器: * BeanListHandler多行结果集处理器 * MapListHandler多行结果集处理器 * 没有参数就不用定义Object[] params={}。 * */@Testpublic void fun1_1() throws SQLException{//创建QueryRunner,需要提供数据库连接池;QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());//给出sql模板String sql="select * from tb_stu";//给出参数//Object[] params={};/*使用BeanListHandler*/List<Stu> list1=qr.query(sql, new BeanListHandler<Stu>(Stu.class));Iterator<Stu> it=list1.iterator();while(it.hasNext()){Stu s=it.next();System.out.println(s.toString());}System.out.println("-----------------------------------");/*使用MapListHandler*/List<Map<String, Object>> list2=qr.query(sql, new MapListHandler());Iterator<Map<String, Object>> it1=list2.iterator();while(it1.hasNext()){Map<String,Object> map=it1.next();System.out.println(map);}}/** * 查询记录 * 单行单列结果 * ScalarHandle * @throws SQLException  * */@Testpublic void fun3() throws SQLException{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="select count(*) from tb_stu";Object obj=qr.query(sql, new ScalarHandler());System.out.println(obj.toString());}/** * 插入新的一条记录 * @throws SQLException  *  * */@Testpublic void fun2() throws SQLException{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="insert into tb_stu values(?,?,?,?,?)";Object[] params={"stu_003","wangwu",20,"female","dancing"};int count=qr.update(sql, params);System.out.println("count:"+count);}}





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 激光点痣的疤痕怎么办 做完眉毛碰水了怎么办 脸上疤掉了有坑怎么办 结痂不小心抠掉怎么办 脸上肉松弛怎么办19岁 点痣留下来的疤怎么办 激光祛斑的红印怎么办 脸上疤掉了红印怎么办 痘痘发炎了红肿怎么办 脸上的斑越来越多了怎么办 点痣留下的疤痕怎么办 额头又高又大怎么办 脸太长额头太高怎么办 动车因台风停运怎么办 爸妈50了要离婚怎么办 鸿利彩票黑了钱怎么办 忘了锁屏图案怎么办 黄金被水银沾上怎么办 被股东了我该怎么办 异地恋没话题聊怎么办 谈了半年分手了怎么办 博士6年没毕业怎么办 发现孩子早恋家长应该怎么办 异地恋想嘿嘿嘿怎么办 妈妈溜冰溜大了怎么办 皮鞋被雨水泡了怎么办 老婆提出离婚我不想离怎么办 极度缺爱的人怎么办 生二胎住院大宝怎么办 爸妈偏心我该怎么办 无创21体高风险怎么办 无创检查高风险怎么办 唐氏筛查21三体高危怎么办 唐筛年龄高风险怎么办 21三体综合症高风险怎么办 朋友深陷李强365怎么办 飞机上烟瘾犯了怎么办 怀孕一个月吸烟了怎么办 烟瘾犯了没烟怎么办 押金交了不租了怎么办 买车首付款不够怎么办