2018-09-12DBUtils工具包+DBCP连接池
DBUtils和连接池:
如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,我们讲采用Apache Commons组件一个成员:DBUtils!
DBUtils就是JDBC的简化开发工具包,需要项目导入commons-dbutils-1.6.jar包!
Dbutils三个核心功能:
QueryRunner中提供对sql语句操作的API!
ResultSetHandler接口,用于定义Select操作后,怎样封装结果集!
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法!
小题目:
注释和泛型不进.Calss文件!
Switch()小括号中可以使用Byte,Short,Char,int,String,Enum枚举等六种类型!
QueryRunner核心类:
Update(Connection conn, String sql, Object... params),用来完成表数据的增加,删除,更新操作!
Query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params),用来完成表数据的查询操作!
示例代码:
package com.oracle.dao; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ColumnListHandler; import org.apache.commons.dbutils.handlers.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import com.oracle.domain.Product; import com.oracle.tools.DBUtils; import com.oracle.tools.JDBCUtils; public class ProductDao { Connection conn=JDBCUtils.getConn(); public void addProduct() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="INSERT INTO PRODUCT(PID,PNAME) VALUES(?,?);"; Object[] obj={"1234567","iphonexs"}; qr.update(conn,sql,obj); //释放资源 DbUtils.closeQuietly(conn); } public void editProduct() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="UPDATE PRODUCT SET PNAME=? WHERE PID=?"; Object[] obj={"VIVOX10","1234567"}; qr.update(conn,sql,obj); //释放资源 DbUtils.closeQuietly(conn); } public void deleteProduct() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="DELETE FROM PRODUCT WHERE PID=?"; qr.update(conn,sql,"1234567"); //释放资源 DbUtils.closeQuietly(conn); } //将结果中的第一行数据封装到Object数组中 public void select1() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT * FROM PRODUCT"; //new ArrayHandler(),虽然是SELECT *但是这个对象只会取第一条数据! Object[] obj=qr.query(conn, sql, new ArrayHandler()); for(Object Ob:obj){ System.out.print(Ob+" "); } } public void select2() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT * FROM PRODUCT"; //new ArrayListHandler()将结果集中每一行都封装到一个Object[]中,然后放入一个List<Object[]>中 List<Object[]> list=qr.query(conn, sql, new ArrayListHandler()); for(Object[] Obo:list){ for(Object Obi:Obo){ System.out.print(Obi+"\t"); } System.out.println(); } } //JavaBean:BeanHandler!将结果集中第一条记录封装到JavaBean中: public void select3() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT * FROM PRODUCT WHERE PID=?"; //传给泛型,和字节码文件对象! //前提JavaBean必须有空参构造,和Set方法! Product product=qr.query(conn, sql, new BeanHandler<Product>(Product.class),2); System.out.println(product); DbUtils.closeQuietly(conn); } //BeanListHandler:先将结果集中的每一条记录封装到指定的JavaBean中,然后将每一个JavaBean封装到List集合中! public void select4() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT * FROM PRODUCT"; //传给泛型,和字节码文件对象! //前提JavaBean必须有空参构造,和Set方法! List<Product> list=qr.query(conn, sql, new BeanListHandler<Product>(Product.class)); //遍历: for(Product pro:list){ System.out.println(pro); } DbUtils.closeQuietly(conn); } public void select5() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT * FROM PRODUCT"; //将结果集中的指定类封装到List集合中! List<String> list=qr.query(conn,sql,new ColumnListHandler<String>("pname")); //遍历: for(String pro:list){ System.out.println(pro); } DbUtils.closeQuietly(conn); } public void select6() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT COUNT(*) FROM PRODUCT"; long count=qr.query(conn,sql,new ScalarHandler<Long>()); System.out.println(count); DbUtils.closeQuietly(conn); } public void select7() throws SQLException{ QueryRunner qr=new QueryRunner(); String sql="SELECT * FROM PRODUCT"; Map<String,Object> map=qr.query(conn,sql,new MapHandler()); //遍历 Set<Map.Entry<String,Object>> set=map.entrySet(); for(Map.Entry<String,Object> entry:set){ System.out.println(entry.getKey()+"…"+entry.getValue()); } DbUtils.closeQuietly(conn); } public void select8() throws SQLException{ QueryRunner qr=new QueryRunner(DBUtils.getDataSource()); String sql="SELECT * FROM PRODUCT"; List<Map<String,Object>> list=qr.query(sql,new MapListHandler()); //遍历 for(Map<String,Object> map:list){ Set<Map.Entry<String,Object>> set=map.entrySet(); for(Map.Entry<String,Object> entry:set){ System.out.println(entry.getKey()+"…"+entry.getValue()); } } DbUtils.closeQuietly(conn); } } package com.oracle.web; import java.io.IOException; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.oracle.dao.ProductDao; public class TestServlet extends HttpServlet { ProductDao productDao=new ProductDao(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*try { productDao.addProduct(); } catch (SQLException e){ e.printStackTrace(); }*/ /*try { productDao.editProduct(); } catch (SQLException e) { e.printStackTrace(); }*/ /*try { productDao.deleteProduct(); } catch (SQLException e) { e.printStackTrace(); }*/ /*try { productDao.select1(); } catch (SQLException e) { e.printStackTrace(); }*/ /*try { productDao.select2(); } catch (SQLException e){ e.printStackTrace(); }*/ /*try { productDao.select3(); } catch (SQLException e){ e.printStackTrace(); }*/ /*try { productDao.select4(); } catch (SQLException e){ e.printStackTrace(); }*/ /*try { productDao.select5(); } catch (SQLException e) { e.printStackTrace(); }*/ /*try { productDao.select6(); } catch (SQLException e) { e.printStackTrace(); }*/ /*try { productDao.select7(); } catch (SQLException e) { e.printStackTrace(); }*/ try { productDao.select8(); } catch (SQLException e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } //JavaBean即Domain中的实体类! //自学C3P0连接池!
连接池:
用池来管理Connection,这样可以重复使用Connection!有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象!当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池!池就可以再利用这个Connection对象了!
//相当于线程池的概念,打开Connection和关闭Connection都会消耗系统资源!
导入Jar包:
模板DBUtils的Tools类:
public class JDBCUtils { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/daydb"; public static final String USERNAME = "root"; public static final String PASSWORD = "root"; /* * 创建连接池BasicDataSource */ public static BasicDataSource dataSource = new BasicDataSource(); //静态代码块 static { //对连接池对象 进行基本的配置 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 dataSource.setUrl(URL); //指定要连接的数据库地址 dataSource.setUsername(USERNAME); //指定要连接数据的用户名 dataSource.setPassword(PASSWORD); //指定要连接数据的密码 } /* * 返回连接池对象 */ public static DataSource getDataSource(){ return dataSource; } }
补充内容后的DBUtils类:
package com.oracle.tools; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class DBUtils { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/store_v1.0"; public static final String USERNAME = "root"; public static final String PASSWORD = "0129"; /* * 创建连接池BasicDataSource */ public static BasicDataSource dataSource = new BasicDataSource(); //静态代码块 static{ //对连接池对象 进行基本的配置 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 dataSource.setUrl(URL); //指定要连接的数据库地址 dataSource.setUsername(USERNAME); //指定要连接数据的用户名 dataSource.setPassword(PASSWORD); //指定要连接数据的密码 } /* * 返回连接池对象 */ public static DataSource getDataSource(){ return dataSource; } public static Connection getConn(){ Connection conn=null; try { conn=dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
常见配置项:
分类 |
属性 |
描述 |
必须项 |
driverClassName |
数据库驱动名称 |
url |
数据库的地址 |
|
username |
用户名 |
|
password |
密码 |
|
基本项(扩展) |
maxActive |
最大连接数量 |
minIdle |
最小空闲连接 |
|
maxIdle |
最大空闲连接 |
|
initialSize |
初始化连接 |
posted on 2018-09-12 15:37 Postgre叮当牛i 阅读(146) 评论(0) 编辑 收藏 举报