一、commons-dbutils-1.6.jar
1.作用:用于操作jdbc连接数据库并且用来执行是sql语句处理返回结果集的架包
2.三个核心类
1)DbUtils:用来关闭资源的类,其中的closeQuietyl()方法关闭资源时,不需要进行异常处理
2)QueryRunner:用来查询结果集,并且返回你想要的结果集
3)参数ResultSetHandel是接口,我们想要什么结果集,就用它对应的实现类
eg:通过第三方架包实现数据的更新和添加
public class Demo01{
publc static void main(String [] args) throws SQLException{
//添加方法
//insert();
//更新方法
update();
}
//更新方法
private static void update() throws SQLException{
QueryRunner qr = new QueryRunner();
//获取连接
Connection connection = JDBCUtil.getConnection();
//使用占位符传入sql语句
String sql = "update sort set sname =?"+",sprice=?,sdesc=? where sid=5";
//方式一,利用数组
Object[] params = {"咖啡",10000,"java里的咖啡"};
int row = qr.update(connection,sql,params)
//方式二,直接船体,要和占位符对应
int row = qr.update(connection,sql,"咖啡",10000,"java里的咖啡");
if(row>0){
System.out.println("修改成功");
}
//用第三方的关闭资源
DbUtils.closeQuietly(connection);
}
//添加
private static void insert() throws SQLException{
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();Connection connection = JDBCUtil.getConnection();
String sql = "insert into sort values (null,'20k显示器',5,'这时一台播放家教的显示器')";
int row = qr.update(connection, sql);
System.out.println(row);
if(row>0) {
System.out.println("显示成功");
}
//安静的关闭资源
DbUtils.closeQuietly(connection);
}
}
//第三方架包的查询
public class Demo02 {
//查询操作
//8个结果集
/*
* 结果集容器1
* ArrayHandler
* 把查询出来的数据的第一行,放进对象数据中并返回
*
*/
@Test
public void select1() throws SQLException {
QueryRunner qr =new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "Select * from sort";
//调用查询方法
//传入什么容器,该类就把数据放到什么容器中给你返回
Object[] rel = qr.query( connection,sql, new ArrayHandler());
for (Object object : rel) {
System.out.println(object);
}
DbUtils.closeQuietly(connection);
}
/*
* ArrayListHander
* 查询每一条记录放到ArrayListHander集合中
* 每一条记录是一个对象数组
*/
@Test
public void select2() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<Object[]> query = qr.query(connection, sql, new ArrayListHandler());
for (Object[] objects : query) {
for (Object object : objects) {
System.out.println(object);
}
System.out.println();
}
DbUtils.closeQuietly(connection);
}
/*
* BeanHandler
* 把结果集的第一行封装成一个JavaBean对象
* 1.成员变量私有化
* 2.提供空参的构造方法
* 3.提供set/get方法
* 符合以上的规则的实体类创建出来的对象
*
*/
@Test
public void select3() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
//要把使用哪个javabean实体类传进去,也就是类名.class
Sort sort = qr.query(connection, sql, new BeanHandler<>(Sort.class));
System.out.println(sort);
if(sort==null) {
System.out.println("没有该条数据");
}
DbUtils.closeQuietly(connection);
}
/*
* BeanListHandler----最多应用
*/
@Test
public void select4() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<Sort> list = qr.query(connection, sql, new BeanListHandler<>(Sort.class));
for (Sort sort : list) {
System.out.println(sort);
}
DbUtils.closeQuietly(connection);
}
/*
* ColumnListhandler
* 查询指定列,返回指定列数据放在list集合中
*
*/
@Test
public void select5() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from sort";
List<Object> query = qr.query(connection, sql, new ColumnListHandler<>("sname"));
for (Object object : query) {
System.out.println(object);
}
DbUtils.closeQuietly(connection);
}
/*
* ScalarHandler 查询只有一个结果
*
* 查询结果是一个的时候使用的
*/
@Test
public void select6() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql ="select avg(sid) from sort";
BigDecimal query = qr.query(connection, sql,new ScalarHandler<BigDecimal>());
System.out.println(query);
DbUtils.closeQuietly(connection);
}
/*
* MapHandler
*
*
*/
@Test
public void select7() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql= "select * from sort";
Map<String, Object> map = qr.query(connection, sql, new MapHandler());
for (String key : map.keySet()) {
System.out.println(key + " " + map.get(key));
}
DbUtils.closeQuietly(connection);
}
/*
* MapListHandler
*
*
*/
@Test
public void select8() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql= "select * from sort";
List<Map<String, Object>> query = qr.query(connection, sql, new MapListHandler());
for (Map<String, Object> map : query) {
for (String key : map.keySet()) {
System.out.println(key + " "+ map.get(key));
}
}
DbUtils.closeQuietly(connection);
}
}
3.数据源
/*
* 数据源
* java为了解决频繁创建数据库连接和释放数据库连接的问题
* 使用数据库连接池来解决 并且 出了一套规范-- 数据库连接池规范(接口)、
* javax.sql.DataSource java扩展包
* 由数据库厂商来提供的
* 常用数据库连接池:DBCP C3P0
* 需要导入的架包:导入的dbcp中的类需要引用pool jar中的类
* commons-dbcp-1.4.jar
* commons-pool-1.5.6.jar
* 基础设置(要使用数据库连接池,必须要设置的内容):
* BasicDataSource 和 DataSource的关系
*BasicDataSource 是DataSource(规范类)的实现类
*mysql驱动类 com.mysql.jdbc.Driver
*访问数据库的链接地址
*访问数据库的用户名和密码
*/
public class DataSourceUtil {
//获取数据库,连接池
private static BasicDataSource dataSource = new BasicDataSource();
static {
//mysql的驱动类 全限定类名
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//扩展设置
dataSource.setInitialSize(10);//初始化连接数
dataSource.setMaxActive(8);//设置最多连接数
dataSource.setMaxIdle(5);//做多空闲数
dataSource.setMinIdle(2);//做小空闲连接数
}
//获取数据库连接
public static DataSource getDataSource() {
return dataSource;
}
//设置dataSorce
//获取数据连接
}