JDBC DBUtils工具类与c3p0池的使用的摸索

首先使用DBUtils与c3p0池需要导入的jar包

MYSQL: mysql-connector-java-5.1.46-bin.jar 

DBUtils:commons-dbutils-1.6.jar

c3p0:    c3p0-0.9.2-pre1.jar ,    mchange-commons-0.2.jar

附上文件下载:链接:https://pan.baidu.com/s/18t-nqudP2qKXEI1rHFcMEQ 密码:pzz3




JDBCUtils工具类:


public class JDBCUtils1 {
//创建连接池的对象
    private static ComboPooledDataSource ds = new ComboPooledDataSource();  
    
    public static Connection getConnection() throws SQLException {  
        return ds.getConnection();  
    }    
    //通过静态方法获取连接池对象
    public static DataSource getDataSource() {  
        return ds;  
    } 

}


c3p0池所使用的xml配置文件:

c3p0-config.xml (放在src下,会实现自动加载)配置如下



<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>  
  
    <default-config>  
  
        <property name="driverClass">com.mysql.jdbc.Driver</property>  

  <property name="jdbcUrl">jdbc:mysql:///mydatabase?useUnicode=true&amp;characterEncoding=UTF-8</property>

   <!-- 关于此处的这段: 
  ?useUnicode=true&amp;characterEncoding=UTF-8
  是在我使用c3p0池提供的方式插入数据时在mysql中出现中文乱码问题,感谢一些资源分享者-->  

        <property name="user">root</property>    
        <property name="password">root</property>    
        <property name="initialPoolSize">5</property>    
        <property name="maxPoolSize">20</property>  
  
    </default-config>  
  

</c3p0-config>  


建表语句:

|dbu_test | CREATE TABLE `dbu_test` (
  `name` varchar(20) DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  `money` float DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=gbk


测试类(增删改):

// @Test
public  void test1(){
//第一步:创建queryRunner对象,用来操作sql语句      
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());      
//第二步:创建sql语句      
String sql = "insert into dbu_test values(?,?,?)";      
//第三步:执行sql语句,params:是sql语句的参数      
//注意,给sql语句设置参数的时候,按照user表中字段的顺序      
try {    
Object[] params = {"crudby","male",2000}; 
int line = qr.update(sql, params);      
System.out.println(line);      
} catch (SQLException e) {      
e.printStackTrace();  
   
}  
}


public void test2(){
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());

// String sql="update dbu_test set money=3000 where name=?";
//开始插入中文时出现数据库查看乱码问题就使用了上面的sql语句测试
String sql="update dbu_test set name='小花',sex='女' where money=1230 ";
try{

// Object[] params ={"crudby"}; int line=qr.update(sql,params);

int line=qr.update(sql);
System.out.println("line="+line);
}catch(SQLException e){
System.out.println("更新失败..");
e.printStackTrace();
}

}

// @Test
public void test3(){
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());
String sql="delete from dbu_test where name=?";
try{
// Object[] params ={"小花"};
//查看QueryRunner的类的方法可以发现可以直接接收String
int line=qr.update(sql,"小花");
System.out.println("line="+line);
}catch(SQLException e){
System.out.println("删除失败..");
e.printStackTrace();
}

}


ResultSetHandler接口的实现类来进行查询结果的封装:

接口实现类MyResult:

public class MyResult implements  ResultSetHandler<List<User>>{
@Override
public List<User> handle(ResultSet rs) throws SQLException {
   List<User> list = new ArrayList<User>();
while(rs.next()){
User user=new User();
user.setName(rs.getString("name"));
user.setSex(rs.getString("sex"));
user.setMoney(rs.getFloat("money"));
list.add(user);
}
return list;
}

}

测试类:

public void test4(){
/*
* 通过MyResult实现ResultSetHandler<T>的接口来作为查询结果的容器
*/
QueryRunner qr=new QueryRunner(JDBCUtils1.getDataSource());
String sql="select * from dbu_test ";
try{
List<User> list =qr.query(sql, new MyResult());
System.out.println(list);
}catch(SQLException e){
System.out.println("查询失败..");
e.printStackTrace();
}

}

//User类就没有贴上,基本属性的get,set方法及重写的toString方法

DBUtils提供的实现类常用的三个BeanHandler、BeanListHandler和ScalarHandler,下列分别进行测试

// @Test
public void test5(){
/*
* BenamHandler<T>是接口ResultSetHandler<T>的实现类
* 将单个查询数据结果返回
*/
QueryRunner qr=new QueryRunner(JDBCUtils1.getDataSource());
String sql="select * from dbu_test ";
try{
User user =qr.query(sql,  new BeanHandler<User>(User.class));
System.out.println(user);
}catch(SQLException e){
System.out.println("查询失败..");
e.printStackTrace();
}

}

// @Test
public void test6(){
/*
* 同上,获取的结果封装成一个list集合
* 与自己写的MyResult实现类功能类似
*/

QueryRunner qr=new QueryRunner(JDBCUtils1.getDataSource());
String sql="select * from dbu_test ";
try{
List<User> list=qr.query(sql,  new BeanListHandler<User>(User.class));
System.out.println(list);
}catch(SQLException e){
System.out.println("查询失败..");
e.printStackTrace();
}

}
@Test
public void test7(){
/*
* ScalarHandler:封装类似count、avg、max、min、sum。。。。函数的执行结果
*/
 
QueryRunner qr = new QueryRunner(JDBCUtils1.getDataSource());
 
 
String sql = "select count(*) from dbu_test";  
try {
 
Object object = qr.query(sql, new ScalarHandler());
 
System.out.println(object);
 
} catch (SQLException e) {
 
System.out.println("查询失败..");
e.printStackTrace();
 
}

}


自学写的总结,期间遇到很多很多的问题,感谢网上一些资源的分享者,如有错误,敬请指正,感激不尽!




 

猜你喜欢

转载自blog.csdn.net/crudby/article/details/80569631
今日推荐