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:初始化连接

DBUtils、连接池相关推荐

  1. DBUtils连接池,websocket

    1.mysql数据库连接池 概念:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放. 这样 ...

  2. python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

  3. python oracle连接池_python - DBUtils 连接池减少oracle数据库的连接数

    问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...

  4. python调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能

    Python 编程中可以使用 PyMysql 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接 MySQL 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对 ...

  5. 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现

    一:需求 1.完成一个酒店后台管理系统,当然只是模拟,在控制台就行模拟 2.实现管理人员的登录和酒店成本账单的查看,以及正常的点餐,结账和查看账单等等功能 二:实现的功能展示 1.用户登录(这里输入的 ...

  6. mysql连接池_数据库技术:数据库连接池,Commons DbUtils,批处理,元数据

    Database Connection Pool Introduction to Database Connection Pool 实际开发中"获得连接"或"释放资源&q ...

  7. dbcp连接池配置详解_JDBC第四篇【数据库连接池、DbUtils框架、分页】(修订版)

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 1.数据库连接池 什么是数据库连接池 简单来说:数据 ...

  8. [Day30] DBUtils和连接池

    1. DBUtils-JDBC的简化开发工具包 1.1 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 ...

  9. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...

最新文章

  1. 使用Docker搭建svn服务器教程
  2. FPGA最全科普总结
  3. Yann LeCun力挺前AAAI主席,批判深度学习的Marcus遭怒怼
  4. 蓝桥杯:基础练习 杨辉三角形
  5. 《美团网编程题》奇数位丢弃
  6. 隐藏search parameter在configuration tab里不相关的field
  7. Axios 如何缓存请求数据?
  8. mysql之union合并查询
  9. 学习使用RIA Framework Flex创建MySQL管理UI(初学Flex实例教程)
  10. VUE 调试神器 vue-devtools
  11. Ascll完整码表(256个)
  12. mysql批量导出工具_sql数据库批量导出|
  13. 怎样设置默认浏览器,绝对干货!
  14. android平板能玩吃鸡吗,刺激战场用什么平板好 平板吃鸡配置推荐
  15. ssm基于微信小程序的恋上诗词设计与实现毕业设计源码011431
  16. B端产品的特点及开发经验
  17. Pycharm和Pytorch安装教程配置环境以及遇到的问题:
  18. SM2RAIN-ASCAT全球规模降雨产品数据集(2007年-2020年6月)
  19. Spring自动注入(引用类型)
  20. 软件设计中的csc_通用集中监控中心CSC解决方案

热门文章

  1. js data日期初始化的5种方法
  2. 【数学题】又是倍数问题
  3. 挖掘Windows 10看图的习惯用法
  4. markdown grammar
  5. react-native 环境配置遇到的问题
  6. 【LeetCode】70 - Climbing Stairs
  7. 我的2012年度总结
  8. XSS 前端防火墙 —— 天衣无缝的防护
  9. [J2ME QA]真机报告MontyThread -n的错误之解释
  10. 使用tensorflow serving部署keras模型(tensorflow 2.0.0)