博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dbutils java_Java篇-DBUtils与连接池
阅读量:6410 次
发布时间:2019-06-23

本文共 7276 字,大约阅读时间需要 24 分钟。

一 : DBUtils

DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装.

核心功能

1. QueryRunner 中提供对sql语句操作的API

update(Connection conn, String sql, Object... params) 用来完成数据表的增删改操作.

增添

//增

public static void insert() throws SQLException{

Object[] par = {"牛油果热辣藤椒鸡超级可塔",23.5};

String sql = "insert into product (pname,price) values (?,?)";

QueryRunner qr = new QueryRunner();

int row = qr.update(con, sql, par);

System.out.println(row);

DbUtils.close(con);

}

删除

//删

public static void delete() throws SQLException{

String sql = "delete from product where id = ?";

QueryRunner qr = new QueryRunner();

int row = qr.update(con, sql, 4);

System.out.println(row);

DbUtils.close(con);

}

更改

//改

public static void update() throws SQLException{

Object[] par = {"肯德基CP堡",28.5,2};

String sql = "update product set pname = ?,price = ? where id = ?";

QueryRunner qr = new QueryRunner();

int row = qr.update(con, sql, par);

System.out.println(row);

DbUtils.close(con);

}

2. ResultSetHandler接口,用于定义select操作后,怎样封装结果集.

其子类以及功能包括

faa326b6b96c?utm_source=oschina-app

子类功能列表

JavaBean 介绍,好像是我们通常用的mvc中model模型,其实就是一个类,

提供私有字段 : private类型 字段名;

提供getter/setter方法;

提供无参构造器,注意:无参构造器一定要提供否则会报错.

也可以实现java.io.Serializable接口

package com.tiantianBaby.java;

public class Product {

private int id;

private String pname;

private String price;

public Product() {

}

public Product(int id, String pname, String price) {

super();

this.id = id;

this.pname = pname;

this.price = price;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getPname() {

return pname;

}

public void setPname(String pname) {

this.pname = pname;

}

public String getPrice() {

return price;

}

public void setPrice(String price) {

this.price = price;

}

@Override

public String toString() {

return "Product [id=" + id + ", pname=" + pname + ", price=" + price + "]";

}

}

ArrayHandler

public static void arrayHander() throws SQLException{

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

Object[] arr = qr.query(con, sql, new ArrayHandler());

for(Object obj : arr){

System.out.println(obj);

}

}

打印

1

汉堡王大汉堡

23.0

ArrayListHandler:

//ArrayListHandler

public static void ArrayListHandler()throws SQLException {

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

List list = qr.query(con, sql,new ArrayListHandler());

for(Object[] itemarr : list) {

for(Object obj:itemarr) {

System.out.print(obj+" ");

}

System.out.println();

}

}

打印

1 汉堡王大汉堡 23.0

2 肯德基CP堡 28.5

3 苹果笔记本 14000.0

6 板烧鸡腿堡 18.0

7 牛油果热辣藤椒鸡超级可塔 23.5

8 肯德基水果茶 11.8

BeanHandler

public static void BeanHandler() throws SQLException{

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

Product pro = qr.query(con, sql,new BeanHandler(Product.class));

System.out.println(pro);

}

打印

Product [id=1, pname=汉堡王大汉堡, price=23]

BeanListHandler

public static void BeanListHandler() throws SQLException{

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

List list = qr.query(con, sql,new BeanListHandler(Product.class));

for(Product p : list) {

System.out.println(p);

}

}

打印

Product [id=1, pname=汉堡王大汉堡, price=23]

Product [id=2, pname=肯德基CP堡, price=28.5]

Product [id=3, pname=苹果笔记本, price=14000]

Product [id=6, pname=板烧鸡腿堡, price=18]

Product [id=7, pname=牛油果热辣藤椒鸡超级可塔, price=23.5]

Product [id=8, pname=肯德基水果茶, price=11.8]

ColumnListHandler

public static void columnListHandler() throws SQLException{

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

List list = qr.query(con, sql,new ColumnListHandler("pname"));

for(Object obj : list) {

System.out.println(obj);

}

}

打印

汉堡王大汉堡

肯德基CP堡

苹果笔记本

板烧鸡腿堡

牛油果热辣藤椒鸡超级可塔

肯德基水果茶

ScalarHandler

public static void ScalarHandler() throws SQLException {

String sql = "select count(*) from product";

QueryRunner qr = new QueryRunner();

long count = qr.query(con, sql,new ScalarHandler());

System.out.println(count);

}

打印

6

MapHandler

public static void mapHandler() throws SQLException{

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

Map map = qr.query(con, sql,new MapHandler());

for(String str : map.keySet()) {

System.out.println(str+"---"+map.get(str));

}

}

打印

id---1

pname---汉堡王大汉堡

price---23.0

MapListHandler

public static void mapListHandler() throws SQLException{

String sql = "select * from product";

QueryRunner qr = new QueryRunner();

List> list = qr.query(con, sql, new MapListHandler());

for(Map map : list) {

for(String key : map.keySet()) {

System.out.print(key+"---"+map.get(key)+" ");

}

System.out.println();

}

}

打印

id---1 pname---汉堡王大汉堡 price---23.0

id---2 pname---肯德基CP堡 price---28.5

id---3 pname---苹果笔记本 price---14000.0

id---6 pname---板烧鸡腿堡 price---18.0

id---7 pname---牛油果热辣藤椒鸡超级可塔 price---23.5

id---8 pname---肯德基水果茶 price---11.8

3. DbUtils类,提供了关闭资源与实务的处理方法

DbUtils.close(con);

二 : 连接池

用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

在开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,所以通常用连接池结束,来共享连接Connection.这样就不用每次都创建连接,释放链接了,这些操作都交给连接池.

DBCP连接池

DBCP是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池.

导入jar包

faa326b6b96c?utm_source=oschina-app

导入jar包

DataSource接口

DataSource是java中提供的连接池,作为DriverManager工具的代替项.

在DBCP提供接口的实现类, 我们要用的具体的连接池

BasicDataSource类.

BasicDataSource类的常见配置

分类 属性

描述

driverClassName

数据库驱动名称

url

数据库的地址

username

用户名

password

密码

maxActive

最大连接数量

minActive

最小连接数量

maxIdle

最大空闲连接

minIdle

最小空闲连接

initialSize

初始化连接

连接

public class DataSourceDemo {

public static void main(String[] args) {

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

dataSource.setUrl("jdbc:mysql://localhost:3306/javadatabase");

dataSource.setUsername("root");

dataSource.setPassword("newpass");

try {

Connection con = dataSource.getConnection();

System.out.println(con);

} catch (SQLException e) {

// e.printStackTrace();

throw new RuntimeException("数据库连接失败");

}

}

}

封装工具类

其中地址url,用户名和密码,都可以用文件进行动态配置.

public class JDBCUtils {

private static BasicDataSource datasource = new BasicDataSource();

static{

//数据库连接信息,必须的

datasource.setDriverClassName("com.mysql.jdbc.Driver");

datasource.setUrl("jdbc:mysql://localhost:3306/javadatabase");

datasource.setUsername("root");

datasource.setPassword("newpass");

//对象连接池中的连接数量配置,可选的

datasource.setInitialSize(10);//初始化的连接数

datasource.setMaxActive(8);//最大连接数量

datasource.setMaxIdle(5);//最大空闲数

datasource.setMinIdle(1);//最小空闲

}

public static DataSource getDataSource() {

return datasource;

}

}

测试工具类

public class QueryRunnerTest {

public static void main(String[] args) {

// select();

insert();

}

private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

public static void insert() {

String sql = "insert into product (pname,price) values(?,?)";

Object[] parms = {"肯德基水果茶","11.8"};

try {

int row = qr.update(sql,parms);

System.out.println(row);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new RuntimeException("数据添加失败");

}

}

public static void select() {

String sql = "select * from product";

try {

List list = qr.query(sql, new ArrayListHandler());

for(Object[] obs : list) {

for(Object item : obs) {

System.out.print(item + "\t");

}

System.out.println();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new RuntimeException("数据查询失败");

}

}

}

转载地址:http://mlwra.baihongyu.com/

你可能感兴趣的文章
面试总结小谈
查看>>
挑战JavaScript正则表达式每日两题(2)
查看>>
卢松松:12306网站订票详细攻略
查看>>
如何用活字格定制监狱管理系统
查看>>
你不知道的币圈江湖,ETH(以太坊)VS比特币,V神看不上中本聪
查看>>
ActiveReports 9实战教程(2): 准备数据源(设计时、运行时)
查看>>
我的运维之路(一)
查看>>
《从零开始学Swift》学习笔记(Day 47)——final关键字
查看>>
SIEM的隐忧
查看>>
Ruby中求50之内的素数方法
查看>>
rsync与FTP(vsftpd)在不同工作场景中的应用
查看>>
CentOS 6.4下Squid代理服务器的安装与配置
查看>>
唠唠 RDS 那些事 —— RDS on Windows Server 2016 第一篇
查看>>
《统一沟通-微软-实战》-8-部署-Microsoft Dynamics CRM 2011
查看>>
学习像树一样活着!
查看>>
IDC:中国安全市场发展潜力巨大
查看>>
多门冰箱市场增变,产品突破引领未来市场
查看>>
SystemCenter2012SP1实践(25)VMM下HyperV的高可用(上)
查看>>
关于飞信短信报警的问题
查看>>
《企业网络构建与安全管理教程》上册
查看>>