一、数据库连接池
数据库运作原理:
在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源。这是因为Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源,JAVA程序则要把代表连接的 java.sql.Connection对象加载到内存中,所以建立数据连接的开销很大,尤其是在大量的并发访问时。假如某网站一天的访问量是10万,那么该网站的服务器就需要创建,断开连接10万次,频繁地创建,断开数据库连接势必会影响数据库的访问效率,甚至导致数据库的崩溃
为了避免频繁地创建数据库连接,数据库连接池技术应运而生。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向连接池申请一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率
举例子:
1.QueryRunner中提供对sql语句操作的API.
2.ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
3.DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
package cn.itcast.demo2;
import java.lang.Character.UnicodeBlock;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import cn.itcast.jdbcutil.JDBCUtilsConfig;
/*
* 使用QueryRunner类,实现对数据表的
* insert delete update
* 调用QueryRunner类的方法 update (Connection con,String sql,Object...param)
* Object...param 可变参数,Object类型,SQL语句会出现?占位符
* 数据库连接对象,自定义的工具类传递
*/
public class QueryRunnerDemo {
private static Connection con = JDBCUtilsConfig.getConnection();
public static void main(String[] args)throws SQLException {
// insert();
// update();
delete();
}
/*
* 定义方法,使用QueryRunner类的方法delete将数据表的数据删除
*/
public static void delete()throws SQLException{
//创建QueryRunner类对象
QueryRunner qr = new QueryRunner();
//写删除的SQL语句
String sql = "DELETE FROM sort WHERE sid=?";
//调用QueryRunner方法update
int row = qr.update(con, sql, 8);
System.out.println(row);
/*
* 判断insert,update,delete执行是否成功
* 对返回值row判断
* if(row>0) 执行成功
*/
DbUtils.closeQuietly(con);//安静的关闭,顺便处理异常
}
/*
* 定义方法,使用QueryRunner类的方法update将数据表的数据修改
*/
public static void update()throws SQLException{
//创建QueryRunner类对象
QueryRunner qr = new QueryRunner();
//写修改数据的SQL语句
String sql = "UPDATE sort SET sname=?,sprice=?,sdesc=? WHERE sid=?";
//定义Object数组,存储?中的参数
Object[] params = {"花卉",100.88,"情人节玫瑰花",4};
//调用QueryRunner方法update
int row = qr.update(con, sql, params);
System.out.println(row);
DbUtils.closeQuietly(con);
}
/*
* 定义方法,使用QueryRunner类的方法update向数据表中,添加数据
*/
public static void insert()throws SQLException{
//创建QueryRunner类对象
QueryRunner qr = new QueryRunner();
String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
//将三个?占位符的实际参数,写在数组中
Object[] params = {"体育用品",289.32,"购买体育用品"};
//调用QueryRunner类的方法update执行SQL语句
int row = qr.update(con, sql, params);
System.out.println(row);
DbUtils.closeQuietly(con);
}
}
二、DBUtils工具
DBUtils工具介绍:
为了更加简单地使用JDBC,Apache组织提供了一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响性能的情况下极大地简化JDBC的编码工作量
DBUtils工具核心是org.apache.commons.dbutils.QueryRunner类和org.apache.commons.dbutils.ResultSetHandler接口,了解它们对于DBUtils工具的学习和使用非常重要
1. DBUtils是操作数据库的一个组件,实现了JDBC的简单封装。
2. DBUtils工具核心是org.apache.commons.dbutils.QueryRunner类和org.apache.commons.dbutilsResultSetHandler接口
3. User类封装对象