JavaWeb——数据库连接池与DBUtils工具
兄弟连_马剑威_JavaWeb_028_开源工具DbUtils的使用

第讲:开源具的使用第28讲:开源工具DbUtils的使用课程大纲•1、DbUtils简介•2、更新操作•3、查询操作1、DBUtils简介•DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。
•下载地址:•/proper/commons-dbutils/download_dbutils.cgi2、更新操作•QueryRunner类•runner.update("delete from user where userName=?","用户名");••int rowEffects = runner.update("insert into user(userName,password,comment) values(?,?,?)", "用户名","密码","备注");3、查询操作•//返回bean•User user = runner.query("select * from user where userId=?", 1,new BeanHandler<User>(User.class));•//返回beanlist•System.out.println("返回BeanList结果......");•List<User> beanListResult =•runner.query("select * from user",())•new BeanListHandler(User.class));3、查询操作•//返回一个值•Object increaseId=runner.query("select last_insert_id()", new ScalarHandler());THANKYOU!微信号:weige-java扫一扫,关注威哥微信公众平台。
javaweb之连接数据库

//执行sql语句
//获取sql语句执行器
//处理结果
} catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();
} return conn; } public static void main(String[] args) {
} } public static void close(ResultSet resultSet ) {
try { if (resultSet != null) { resultSet.close(); }
} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace();
DBUtil.getConnection(); } public static void close(Connection connection ) {
try { if (connection != null) { connection.close(); }
} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace();
15
try {
16
Connection conn=DBUtil.getConnection();
17
PreparedStatement pstmt=conn.prepareStatement(sql);
18
pstmt.setString(1,n.getClassname());
dbutil 参数

dbutil 参数
DBUtil是一个常见的数据库连接工具类,用于简化数据库操作。
它通常包含一些参数,用于配置数据库连接和操作。
1. 数据库驱动参数,DBUtil需要指定数据库驱动程序,以便
正确加载和使用数据库。
这个参数通常是一个字符串,指定数据库
驱动的类名或JDBC URL。
2. 数据库连接参数,DBUtil需要提供数据库连接的相关参数,以便建立与数据库的连接。
这些参数可以包括数据库的URL、用户名、密码等。
3. 连接池参数,如果使用连接池来管理数据库连接,DBUtil
可能还会包含一些连接池相关的参数。
这些参数可以包括最大连接数、最小空闲连接数、连接超时时间等。
4. SQL语句参数,DBUtil通常需要提供执行的SQL语句和相应
的参数。
这些参数可以是查询条件、更新数据等操作所需的参数。
5. 数据库操作参数,DBUtil可能还会包含其他一些数据库操
作相关的参数,例如事务管理、批量操作等。
需要注意的是,具体的参数列表和使用方式可能因不同的DBUtil实现而有所差异。
在使用DBUtil时,可以参考相应的文档或示例代码,以了解具体的参数要求和使用方式。
总结起来,DBUtil的参数包括数据库驱动参数、数据库连接参数、连接池参数、SQL语句参数以及其他数据库操作参数,这些参数共同配置和指导DBUtil的数据库连接和操作行为。
javaweb学习总结(四十一)——Apache的DBUtils框架学习

javaweb学习总结(四⼗⼀)——Apache的DBUtils框架学习⼀、commons-dbutils简介 commons-dbutils 是 Apache 组织提供的⼀个开源 JDBC⼯具类库,它是对JDBC的简单封装,学习成本极低,并且使⽤dbutils能极⼤简化jdbc编码的⼯作量,同时也不会影响程序的性能。
因此dbutils成为很多不喜欢hibernate的公司的⾸选。
commons-dbutilsAPI介绍:mons.dbutils.QueryRunnermons.dbutils.ResultSetHandler ⼯具类mons.dbutils.DbUtils⼆、QueryRunner类使⽤讲解 该类简单化了SQL查询,它与ResultSetHandler组合在⼀起使⽤可以完成⼤部分的数据库操作,能够⼤⼤减少编码量。
QueryRunner类提供了两个构造⽅法:默认的构造⽅法需要⼀个 javax.sql.DataSource 来作参数的构造⽅法。
2.1、QueryRunner类的主要⽅法 public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执⾏⼀个查询操作,在这个查询中,对象数组中的每个元素值被⽤来作为查询语句的置换参数。
该⽅法会⾃⾏处理 PreparedStatement 和 ResultSet 的创建和关闭。
public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: ⼏乎与第⼀种⽅法⼀样;唯⼀的不同在于它不将数据库连接提供给⽅法,并且它是从提供给构造⽅法的数据源(DataSource) 或使⽤的setDataSource ⽅法中重新获得Connection。
DButils

DButilsDBUtils什么是DBUtilsDBUtils是⼀个实⽤⼩巧的⼯具,封装了JDBC.简化了JDBC的操作.对于数据库的读操作,只需要知道sql语句即可.DBUtils会将查询的结果集以指定的⽅式封装起来,⽐如List, javaBean等.同时⽀持数据源技术.使⽤时需要引⼊DButils的jar包:密码:f6l6DBUtils的APIQueryRunner对象1.对象描述该对象⽤来提供执⾏增删改查的⽅法.2.⽅法query() 查询⽅法update() 增删改⽅法ResultSetHandler对象(接⼝)1.对象描述⽤来对查询的结果集进⾏封装2.该接⼝常⽤实现类ArrayHandler适合结果集是⼀⾏数据,该实现类会将这⾏数据封装成⼀个数组对象,元素即为查询出来的字段值.ArrayListHandler适合结果集是多⾏数据,会将这些数据封装成⼀个List集合,该集合的元素是数组,数组即为每⾏数据ColumnListHandler适合结果集是多⾏单列,会将这些数据封装到⼀个List集合KeyedHandler适合取多条数据,会将每条数据封装成⼀个map集合,最后再把这些map集合封装成⼤map中MapHandler适合结果集是⼀条数据,封装到map集合中MapListHandler适合取多条数据,会将每条数据封装成⼀个map集合,最后再把这些map集合封装成List中ScalarHandler适合取单⾏单列数据,⽐如聚合函数BeanHandler适合取单⾏数据,将数据封装成对象BeanListHandler适合取多⾏数据,将每⾏数据封装成⼀个对象,再把这些对象封装成⼀个List集合举个栗⼦BeanListHandlerpublic class Demo {public static void main(String[] args) throws SQLException {//执⾏查询//创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();Connection connection = JDBCUtil.getConnection(); //此⽅法是⾃定义实现的参考连接池那篇随笔//查询多⾏,并封装成对象,再放进List集合中List<Employee> list = queryRunner.query(connection, "select * from emp", new BeanListHandler<Employee>(Employee.class));for(Enployee e:list){System.out.println(e);}}}栗⼦BeanHandler://执⾏查询//创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();Connection connection = JDBCUtil.getConnection();//查询⼀⾏,封装成对象Employee emp = queryRunner.query(connection, "select * from emp where e_id = ?", new BeanHandler<Employee>(Employee.class), 1); //此处的1是where语句等号后⾯的?,做参数栗⼦KeyedHandler://执⾏查询//创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();Connection connection = JDBCUtil.getConnection();Map<Object, Map<String, Object>> map = queryRunner.query(connection, "select * from emp", new KeyedHandler(2));//遍历map集合Set<Map.Entry<Object, Map<String, Object>>> set = map.entrySet();for(Map.Entry<Object, Map<String, Object>> entry : set){Object bigKey = entry.getKey();Map<String, Object> smallMap = entry.getValue();System.out.println(bigKey); //关⽻Set<String> smallSet = smallMap.keySet();for(String smallKey : smallSet) {Object value = smallMap.get(smallKey);System.out.println(smallKey + ":" + value);}}栗⼦ScalarHandler://执⾏查询//创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();Connection connection = JDBCUtil.getConnection();//聚合函数long num = (long) queryRunner.query(connection, "select count(*) from emp", new ScalarHandler());System.out.println(num);栗⼦://执⾏查询//创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();Connection connection = JDBCUtil.getConnection();//增Employee employee = new Employee();employee.setE_id(18);employee.setE_name("吕布");employee.setE_salary(10000.0);employee.setE_did(1);employee.setHiretime(new Date());employee.setE_job("staff");Object[] param = {employee.getE_id(), employee.getE_name(), employee.getE_salary(), employee.getE_job(), employee.getE_did(), employee.getHiretime()}; int row = queryRunner.update(connection, "delete from emp where e_name = ?", employee.getE_name());System.out.println(row);JDBCUtil.close(connection);。
java学习笔记之DBUtils工具包详解

java学习笔记之DBUtils⼯具包详解DBUtils⼯具包⼀.介绍DBUtils是Apache组织开源的数据库⼯具类。
⼆.使⽤步骤①.创建QueryRunner对象②.调⽤update()⽅法或者query()⽅法执⾏sql语句三.构造⽅法及静态⽅法QueryRunner类1.构造⽅法①.⽆参构造QueryRunner qr =new QueryRunner();使⽤⽆参构造的时候,调⽤update⽅法和query⽅法时就需要使⽤带Connection 类型参数的重载形式②.有参构造QueryRunner qr= new QueryRunner(DataSource dataSource);这个参数是连接池对象2.静态⽅法①.int update(Connection con ,String sql ,Param);该⽅法⽤于增删改语句的操作参数介绍:参数⼀:连接池对象(这个在⽆参构造的时候使⽤)参数⼆:sql语句参数三:可变参数(就是sql占位符的值)返回值:int类型的返回受影响的⾏数简单update demopublic class Demo {public static void main(String[] args) throws Exception {/** 演⽰有参构造的update()⽅法** ⾸先得导⼊jar包* 配置好C3P0的配置⽂件与准备好C3P0⼯具类* 然后创建QueryRunner对象* 调⽤update⽅法* 最后处理结果*/QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());int re = qr.update("update user set name=? where uid=?","张三",2);if(re>0){System.out.println("修改成功");}else {System.out.println("修改失败");}}}附上简单的C3P0⼯具类public class C3P0Utils {private static DataSource dataSource=new ComboPooledDataSource();/*** 获得DataSource实现类对象* @return*/public static DataSource getDataSource(){return dataSource;}/*** 获得连接* @return* @throws Exception*/public static Connection getConnection()throws Exception{return dataSource.getConnection();}}②.query(Connection con , String sql ,Param ...)该⽅法⽤于出查询操作参数介绍:参数⼀:Connection 数据库连接对象,使⽤带参构造时可以不⽤参数⼆:sql语句参数三:表⽰对结果集的处理⽅式(ResultSetHandler接⼝)ArrayHandler: 表⽰将结果集第⼀⾏的数据存⼊数组ArrayListHandler 将结果集每⼀⾏的数据存⼊数组,多个数组存⼊集合 List<Object[]> BeanHandler 表⽰将结果集第⼀⾏的数据存⼊Java Bean对象BeanListHandler 表⽰将结果集每⼀⾏的数据存⼊Java Bean对象,多个对象存⼊集合ColumnListHandler 表⽰将某⼀列的数据存⼊集合MapHandler 表⽰将结果集第⼀⾏的数据存⼊Map集合 :键:列名值:列的值MapListHandler 表⽰将结果集每⼀⾏的数据存⼊Map集合多个Map存⼊List集合 List<Map<,>> ScalarHandler 获取⼀个值: count(*) sum(price)参数四:可变参数(就是sql占位符的值)使⽤BeanListHandler处理⽅式的demo:public void demo1() throws Exception{QueryRunner qr = new QueryRunner(MyC3P0Utils.getDataSource());List<Car> list = qr.query("select * from car where price<20 order by price desc", new BeanListHandler<>(Car.class)); for (Car car : list) {System.out.println(car);}}javaBean类的编写:public class Car {private int cid;private String cname;private String company;private String grade;private double price;@Overridepublic String toString() {return "Car [cid=" + cid + ", cname=" + cname + ", company=" + company + ", grade=" + grade + ", price=" + price+ "]";}public int getCid() {return cid;}public void setCid(int cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {ame = cname;}public String getCompany() {return company;}public void setCompany(String company) {pany = company;}public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public Car(int cid, String cname, String company, String grade, double price) {super();this.cid = cid;ame = cname;pany = company;this.grade = grade;this.price = price;}public Car() {super();// TODO Auto-generated constructor stub}}以上这篇java学习笔记之DBUtils⼯具包详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
dbutils的使用

dbutils的使用dbutils是一个在Java中使用数据库的工具类库,它提供了简单而强大的API,使得数据库操作变得更加容易。
在这篇文章中,我将向您介绍如何使用dbutils进行常见的数据库操作,包括查询、插入、更新和删除数据。
1. 查询数据使用dbutils查询数据非常简单。
首先,您需要创建一个QueryRunner对象,并传入一个数据源。
然后,您可以使用`query`方法执行查询语句,并将结果集转换为您需要的对象或列表。
例如,下面的代码将执行一个简单的查询,并将结果集转换为一个列表:```javaQueryRunner queryRunner = new QueryRunner(dataSource);String sql = "SELECT * FROM users";List<User> users = queryRunner.query(sql, new BeanListHandler<>(User.class));```2. 插入数据要向数据库中插入数据,您可以使用`update`方法。
首先,您需要创建一个UpdateRunner对象,并传入一个数据源。
然后,您可以使用`update`方法执行插入语句,并传入相应的参数。
例如,下面的代码将向数据库中插入一条新的用户记录:```javaUpdateRunner updateRunner = new UpdateRunner(dataSource); String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; updateRunner.update(sql, "John Doe", 25);```3. 更新数据使用dbutils更新数据也非常简单。
您可以使用`update`方法执行更新语句,并传入相应的参数。
Jakarta项目的commons包

?IO——帮助进行IO功能开发
?Jelly——Jelly能够把XML转换成可执行代码,所以Jelly是一个基于XML与Java的脚本和处理引擎。 Jelly借鉴了JSP定指标签,Velocity, Cocoon和Xdoclet中的脚本引擎的许多优点。Jelly可以用在命令行,Ant或者Servlet之中。
以下是StringUtils的各项用法
1.空字符串检查
使用函数: StringUtils.isBlank(testString)
函数介绍: 当testString为空,长度为零或者仅由空白字符(whitespace)组成时,返回True;否则返回False
例程:
String test = "";
String test2 = "\n\n\t";
String test3 = null;
String test4 = "Test";
System.out.println( "test blank? " + StringUtils.isBlank( test ) );
?CLI——处理命令行的命令的解析。
?Codec——包含一些通用的编码解码算法。包括一些语音编码器, Hex, Base64, 以及URL encoder。
?Collections——扩展和增加标准的 Java Collection框架。
?Configuration——操作各种格式的配置文件。Properties文件 /XML文件 /JNDI /JDBC 数据源 /System properties /Applet parameters / Servlet parameters
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for (int i = 0; i < 10000; i++) { Connection conn = DBCPUtils.getConnection(); DBCPUtils.closeConn(conn); } long end = System.currentTimeMillis(); System.out.println("用时:" + (end - begin)); } }
Байду номын сангаас
#<!-- 最小空闲连接 --> minIdle=5 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1 表示无限制 maxWait=1000
2.创建 DBCP 工具类文件 创建一个名称为 DBCPUtils 的工具类,其代码如下所示。
import java.sql.*; import java.util.Properties; import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory; public class DBCPUtils { private static DataSource ds;//定义一个连接池对象 static{ try { Properties pro = new Properties(); pro.load(DBCPUtils.class.getClassLoader() .getResourceAsStream("dbcpconfig.properties")); //得到一个连接池对象 ds = BasicDataSourceFactory.createDataSource(pro); } catch (Exception e) { throw new ExceptionInInitializerError("初始化连接错误,请检查配置文件!"); } } //从池中获取一个连接 public static Connection getConnection() throws SQLException{ return ds.getConnection(); } public static void closeConn(Connection conn){ if(conn!=null){ try { conn.close();//关闭 } catch (SQLException e) { e.printStackTrace(); } } } }
执行程序后,控制台的输出结果如下图所示。
三、案例总结
在上述案例中,是通过读取配置文件创建的数据源对象。其中, BasicDataSourceFactory 是创建 BasicDataSource 对象的工厂类,它包含一个返回值为 BasicDataSource 对象的方法 createDataSource(),该 方法通过读取配置文件的信息生成数据源对象并返回给调用者。这种把数据库的连接信息和数据源的初始 化信息提取出来写进配置文件的方式,让代码看起来更加简洁,思路也更加清晰。 在测试类中,使用 for 循环创建和关闭了 10000 个连接,并通过开始时间和结束时间的差值来演示了 所用时长,从运行结果中可以看到,其所有时间是非常短的。
第 10 章 补充案例
案例 10-1
DBCP 的使用
一、案例描述
1、 考核知识点 名称:DBCP 数据源 编号:028010002 2、 练习目标 Ø 掌握 DBCP 的使用 3、 需求分析 假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪 费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。为了避免频繁的创建数据库连接,数 据库连接池技术应运而生。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使 用现有的数据库连接,而不是重新建立。一些开源组织提供了数据源的独立实现,其中,较为常用的 一种数据库连接池就是 DBCP。 4、 设计思路(实现原理) 单 独 使 用 DBCP 数 据 源 时 , 需 要 在 应 用 程 序 中 导 入 两 个 JAR 包 commons-dbcp.jar 和 commons-pool.jar,在要连接数据库还需要导入数据库的驱动包 mysql-connector-java-5.0.8-bin.jar。 1) 创建一个用于设置数据库连接信息的 Properties 文件, 文件中包含连接信息和连接池数量等。 2) 编写用于获取连接池的工具类,工具类中包含获取连接池和关闭连接池的方法。 3) 创建一个测试类,测试能否获取到连接信息。
导入数据库的驱动包 mysql-connector-java-5.0.8-bin.jar。 1) 创建一个用于设置数据库连接信息和数据源的初始化信息的文件。 2) 创建一个测试类,在测试类中通过静态代码快初始化数据源信息,然后在 main 方法中使用 PreparedStatement 对象执行 SQL 查询语句,并通过循环语句输出查询出的数据信息。
2.创建测试类 创建一个名称为 C3p0Test 的类,其代码如下所示。
import java.sql.*; import boPooledDataSource; public class C3p0Test { public static DataSource ds = null; // 初始化 C3P0 数据源 static { // 使用 c3p0-config.xml 配置文件中的 named-config 节点中 name 属性的值 ComboPooledDataSource cpds = new ComboPooledDataSource("itcast"); ds = cpds; } public static void main(String[] args) { Connection conn = null; PreparedStatement prestmt = null; ResultSet rs = null; try { conn = ds.getConnection(); String sql = "select * from user"; prestmt = conn.prepareStatement(sql); rs = prestmt.executeQuery(); while (rs.next()) {
案例 10-2
使用 C3P0 数据源查询数据
一、案例描述
1、 考核知识点 名称:C3P0 数据源 编号:028010003 2、 练习目标 Ø 掌握 C3P0 的使用 Ø 掌握 PreparedStatement 对象的使用 3、 需求分析 C3P0 是目前最流行的开源数据库连接池之一,它实现了 DataSource 数据源接口,支持 JDBC2 和 JDBC3 的标准规范,易于扩展并且性能优越,著名的开源框架 Hibernate 和 Spring 都支持该数据源。 因此,掌握该数据源的使用也是十分必要的。本案例通过使用读取配置文件的方式创建数据源对象, 来演示如何使用 C3P0 数据源查询数据表中的数据。 4、 设计思路(实现原理) 单独使用 C3P0 数据源时,需要在应用程序中导入 JAR 包 c3p0-0.9.1.2.jar,在要连接数据库还需要
3.创建测试类,测试运行结果 创建一个测试类 DBCPTest,在其 main 方法中测试获取数据连接。其测试类的代码如下:
import java.sql.SQLException; public class DBCPTest { public static void main(String[] args) throws SQLException { //输出连接信息 System.out.println(DBCPUtils.getConnection()); long begin = System.currentTimeMillis();
二、案例实现
1.创建配置文件 dbcpconfig.properties 在项目的 src 目录下创建一个名称为 dbcpconfig.properties 的配置文件,编辑后的内容如下所示。
#连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc username=root password=itcast #<!-- 初始化连接 --> initialSize=10 #最大连接数量 maxActive=50 #<!-- 最大空闲连接 --> maxIdle=20
System.out.print(rs.getInt("id") + "
\t"); \t"); \t");
System.out.print(rs.getString("name") + " System.out.println(); } } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } if (prestmt != null) { try { prestmt.close(); } catch (SQLException e) { e.printStackTrace(); } prestmt = null; } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } } }
System.out.print(rs.getString("password") + "