本帖最后由 zhangyiling5 于 2016-9-25 12:03 编辑
①. DBCP的 概念(容器)、意义(提升性能); ps:容器就是连接池
②. 常见的连接池:DBCP、C3P0。
③. 使用DBCP需导入4个包:
file:///C:/Users/UPA/Documents/My%20Knowledge/temp/b38743de-797b-47cc-bf59-cd05c167b52a/128/index_files/31300274.png
④. ResultSetHandler 结果集(用于接收select查询语句返回信息):
ArrayHandler 查询记录的第一行
ArrayListHandler 查询记录的所有行, 封装到集合中
BeanHandler 以对象的方式查询记录的第一行
BeanListHandler 以对象的方式查询记录的所有行, 封装到 LIst集合中
ColumnListHandler 查询记录的列,封装到 List集合中
ScalarHandler 查询单个数据, 如:count(*) where id > 1, 查询 id列中 大于1的个数
MapHandler 查询记录的第一行,可获取列名, 封装到Map集合中
MapListHandler 查询记录的所有行, 可获取列名,将Map集合封装 List集合中
一. DBCP我的使用演示:
1. 数据库:
file:///C:/Users/UPA/Documents/My%20Knowledge/temp/b38743de-797b-47cc-bf59-cd05c167b52a/128/index_files/31760259.png
2. 配置文件:
file:///C:/Users/UPA/Documents/My%20Knowledge/temp/b38743de-797b-47cc-bf59-cd05c167b52a/128/index_files/31842877.png
3. DBCP工具类:
[Java] 纯文本查看 复制代码 import java.io.FileInputStream;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class DBCPUtils {
// 创建 DBCP 核心类 BasicDataSource
private static BasicDataSource dataSource = new BasicDataSource();
// 定义为静态代码块,让DBCPUtils类一加载,就初始化 BasicDataSource
static {
// 声明一个配置文件集合
Properties per = new Properties();
try {
// 加载配置文件中的内容到Map集合中
per.load(new FileInputStream("dbcp.properties"));
// 获取集合中的 键 所对应的值
String driverClass = per.getProperty("driverClass");
String url = per.getProperty("url");
String username = per.getProperty("username");
String password = per.getProperty("password");
// 设置BasicDataSource类的初始值
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("初始化失败");
}
}
// 因为 BasicDataSource类 实现了 DataSource接口,所以这里可以使用多态,返回的实际是BasicDataSource实现类
public static DataSource getDataSource (){
return dataSource;
}
}
4. 使用DBCP对数据库进行操作演示:[Java] 纯文本查看 复制代码 import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
public class DBCP_Demo {
// 因为在以下静态方法中多次用到,所以这里将 DBUtils与DBCP的核心 定义为静态成员变量
// QueryRunner为DBUtils的核心,BasicDataSource为DBCP的核心
public static QueryRunner qr = new QueryRunner(DBCPUtils.getDataSource());
public static void main(String[] args) throws SQLException {
//insert();
//update();
//select();
//delete();
}
// 增
public static void insert() throws SQLException {
// 1.获取DBCP连接池
//DataSource dataSource = DBCPUtils.getDataSource();
// 2.向dbutils工具 核心类QueryRunner 构造中传入 DataSource 的实现类 BasicDataSource连接池(作用:使程序运行更高效)
//QueryRunner qr = new QueryRunner(dataSource);
// 3.声明sql语句
String sql = "insert into user values (null,?,?)";
// 4.执行sql语句,并返回一个行数影响值(影响了几行记录)
int result = qr.update(sql, "zhang","12345");
// 5.打印反馈的影响值
System.out.println(result);
// !连接池不用释放资源
}
// 改
public static void update() throws SQLException{
String sql = "update user set username = ?, password = ? where id = ?";
int result = qr.update(sql, "michael", "54321", 1);
System.out.println(result);
}
// 查
public static void select() throws SQLException {
String sql = "select username,password from user";
// 执行sql语句,并返回匿名类所对应的结果集
List<Object[]> list = qr.query(sql, new ArrayListHandler());
// 获取并打印结果集中的信息
/*for (Object[] objs : list) {
for (Object obj : objs) {
// 显示 数据库中所有的 账号、密码信息
System.out.print(obj+" ");
}
}*/
//因为知道查询结果只有2个列名,也可以使用以下方式遍历
for (Object[] objs : list) {
Object username = objs[0];
Object password = objs[1];
System.out.println("帐号:"+username+"\t密码:"+password);
}
}
// 删
public static void delete() throws SQLException {
String sql = "delete from user where id = ?";
int result = qr.update(sql, 1);
System.out.println(result);
}
}
|