DBUtils、连接池

1.DBUtils

它是JDBC的简化开发工具包

需项目导入commons-dbutils-1.6.jar

3个核心功能:

  • QuerryRunner:提供对SQL语句操作的API
  • ResultSetHandler:接口,用于定义select操作后,怎样封装结果集
  • DBUtils类:一个工具类,定义了关闭资源与事务处理的方法

2.QuerryRunner

update(Connection conn,String sql,Object...params):用于完成表数据的增删改;

query(Connection conn,String sql,ResultSetHandler<T> rsh,params):用于完成表数据的查询操作

2.1添加

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="INSERT INTO zhangwu(name,money,parent VALUES(?,?,?))";
        
        Object[] params={"股票收入","5500","收入"};//分别对应3个?
    
        Connextion xonn=JDBCUtils.getCOnextion();
    
        int line=qr.update(conn,sql,params);

        System.out.println("line"+line);
    }catch(SQLException e){
        throw new RuntimeException(e);
    }
}

2.2更新

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="UPDATE zhangwu SET money=money+1000 WHERE name=?";
        
        Object[] params={"股票收入"};
    
        Connextion xonn=JDBCUtils.getCOnextion();
    
        int line=qr..update(conn,sql,params);

        System.out.println("line"+line);
    }catch(SQLException e){
        throw new RuntimeException(e);
    }
}

2.3删除

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="DELETE FROM zhangwu WHERE name=?";
        
        Object[] params={"股票收入"};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        int line=qr..update(conn,sql,params);

        System.out.println("line"+line);
    }catch(SQLException e){
        throw new RuntimeException(e);
    }
}

2.4查询

ResultSetHandler结果集处理类

2.4.1 ArrayHandler

将结果集中的第一条记录封装到一个Object[ ]数组中,数组中的每个元素就是这条记录中的每一个字段的值。

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="SELECT * FROM zhangwu";
        
        Object params={};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        Object[] objArray=qr.query(conn,sql,new ArrayHandler(),params);

        System.out.println(Arrays.toString(objArray));
    }catch(SQLException e){
        throw new RuntimeException(e);
    }
}

2.4.2 ArrayListHandler

将结果集中的每一条记录封装到一个Object[ ]数组中,然后将这些数组在封装到List集合中。

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="SELECT * FROM zhangwu WHERE money=?";
        
        Object params={2000};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        List<Object[]> list=qr.query(conn,sql,new ArrayListHandler(),params);
    
        for(Object[] arr:list){
            System.out.println(Arrays.toString(objArray));
        }
        }catch(SQLException e){
            throw new RuntimeException(e);
    }
}

2.4.3 BeanHandler

将结果集中的第一条记录封装到一个JavaBean中。

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="SELECT * FROM zhangwu WHERE money=?";
        
        Object params={2000};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        zhangwu zw=qr.query(conn,sql,new BeanHandler<zhangwu>(zhangwu.class),params);
    
        System.out.println(zw);

        }catch(SQLException e){
            throw new RuntimeException(e);
    }
}
  • JavaBean:是一种Java语言写成的可重用组件。(http://www.runoob.com/jsp/jsp-javabean.html
  • 为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。
  • 特点:
    • 提供一个默认的无参构造函数。
    • 需要被序列化并且实现了Serializable接口。
    • 可能有一系列可读写属性(私有字段:private 类型 字段名)
    • 可能有一系列的"getter"或"setter"方法
  • 属性:
    • 一个JavaBean对象的属性应该是可访问的。这个属性可以是任意合法的Java数据类型,包括自定义Java类。
    • 一个JavaBean对象的属性可以是可读写,或只读,或只写。JavaBean对象的属性通过JavaBean实现类中提供的两个方法来访问:

getPropertyName()

举例来说,如果属性的名称为myName,那么这个方法的名字就要写成getMyName()来读取这个属性。这个方法也称为访问器。
setPropertyName()举例来说,如果属性的名称为myName,那么这个方法的名字就要写成setMyName()来写入这个属性。这个方法也称为写入器。
  • 示例:
public class StudentsBean implements java.io.Serializable{
   private String name = null;
   private int age = 0;

   public StudentsBean() {
   }

   public String getName(){
      return name;
   }

   public int getAge(){
      return age;
   }

   public void setName(String name){
      this.name = name;
   }

   public void setAge(int age) {
      this.age = age;
   }
}

2.4.4 BeanListHandler

将结果集中的每一条记录封装到一个JavaBean中。再将这些JavaBean封装到List集合中。

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="SELECT * FROM zhangwu WHERE money=?";
        
        Object params={2000};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        List<zhangwu> list=qr.query(conn,sql,new BeanListHandler<zhangwu>(zhangwu.class),params);
        
        for(zhangwu zw:list){
            System.out.println(zw);
        }
        
        }catch(SQLException e){
            throw new RuntimeException(e);
    }
}

2.4.5 ColumnListHandler

将结果集中指定的列的字段值封装到一个List集合中。

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="SELECT * FROM zhangwu WHERE money=?";
        
        Object params={2000};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        List<String> list=qr.query(conn,sql,new ColumnListHandler<String>(zhangwu.class),params);
        
        for(String str:list){
            System.out.println(str);
        }
        
        }catch(SQLException e){
            throw new RuntimeException(e);
    }
}

2.4.6 ScalerHandler

用于单数据,eg. select count(*) from user。

public void insert(){
    try{
        QuerryRunner qr=new QuerryRunner();

        String sql="SELECT MAX(money) FROM zhangwu";
        
        Object params={};
    
        Connextion conn=JDBCUtils.getCOnextion();
    
        Double max=qr.query(conn,sql,new ScalarHandler<Double>(),params);
        
        System.out.println("max="+max);
        
        }catch(SQLException e){
            throw new RuntimeException(e);
    }
}

2.4.7 MapHandler

将结果集中第一行数据封装到Map集合中,key列名,value该列数据。

2.4.8 MapListHandler

将结果集的每一行封装到一个Map中,再将这些Map封装到List中。

3.连接池

用池管理连接Connection,以达到复用Connection的目的。

不用自己创建,通过池来获取Connection对象。

调用Connection的close()方法,并不会关闭Connection,而是将它还给池,池可再分配它。

javax.sql.DataSource

Java为数据库连接池提供的公共接口。

各个厂商应让自己的连接池实现这个接口,以便应用程序可以方便切换不同厂商的连接池。

常见的连接池:DBCP、C3PO

3.1DBCP

tomcat内置的连接池。

导入jar包。

commons-dbcp-1.4.jar

commons-pool-1.5.6.jar

DataSource:java提供的连接池规则接口,作为DriverManager工具的替代项。

在DBCP中提供了其实现类:BasicDataSource

创建连接池

public static BasicDataSource datasource=new BasicDataSource();
    public static final String DRIVERNAME="com.mysql.jdbc.Driver";
    public static final String URL="JDBC:MYSQL://LOCALHOST:3306/mydb";
    public static final String USERNAME="root";
    public static final String PAEEWORD="root";

static{
    datasource.serDriverClassName(DRIVER);
    datasource.setUrl(URL);
    datasource.setUsername(USERNAME);
    datasource.sePassword(PASSWORD);
}

返回连接池对象

public static DataSource getDataSource{
    return datasource;
}

使用

public void insert(){
    try{
        QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
    
        String sql="INSERT INTO zhangwu (name,monet,parent) VALUES(?,?,?);

        Object[] params={"股票交易","5500","收入"};

        int line=qr.update(sql,params);//没有conn这个参数了

        System.out.println("line="+line);
    }catch(SQLException E){
        throw new RuntimeException(e);
    }
}
public void search(){
    try{
        QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
    
        String sql="INSERT INTO zhangwu (name,monet,parent) VALUES(?,?,?);

        Object[] params={"股票交易","5500","收入"};

        Product p=qr.query(sql,new BeanHandler<Product>(Product.class),params);

        System.out.println("line="+line);
    }catch(SQLException E){
        throw new RuntimeException(e);
    }
}

常见配置项

必须项

  • driverClassName
  • url
  • username
  • password

基本项(扩展)

  • maxActive:最大连接数量
  • minIdle:最小空闲连接
  • maxIdle:最大空闲连接
  • initialsize:初始化连接

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值