本文共 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操作后,怎样封装结果集.
其子类以及功能包括
子类功能列表
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包
导入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/