一 : 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<Object[]> 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>(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<Product> list = qr.query(con, sql,new BeanListHandler<Product>(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<String> list = qr.query(con, sql,new ColumnListHandler<String>("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<Long>()); System.out.println(count); }
打印
6
MapHandler
public static void mapHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); Map<String,Object> map = qr.query(con, sql,new MapHandler()); for(String str : map.keySet()) { System.out.println(str+"---"+map.get(str)); } }
打印
id---1pname---汉堡王大汉堡 price---23.0
MapListHandler
public static void mapListHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler()); for(Map<String,Object> 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<Object[]> 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("数据查询失败"); } } }
作者:TianTianBaby223
链接:https://www.jianshu.com/p/faa326b6b96c
共同学习,写下你的评论
评论加载中...
作者其他优质文章