A: 概述java
B: Dbutils三个核心功能介绍mysql
QueryRunner中提供对sql语句操做的API.sql
A: 方法介绍数据库
调用QueryRunner类的方法 update (Connection con,String sql,Object...param)apache
import net.allidea.jdbcutil.JDBCUtilsConfig; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import java.sql.Connection; import java.sql.SQLException; public class QueryRunnerDemo { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException { // insert(); // update(); deleta(); } //删除数据:定义方法,使用QueryRunner类的方法update将数据表的数据删除 public static void deleta() throws SQLException { //建立QueryRunner类对象 QueryRunner qr = new QueryRunner(); //写修改数据的sql语句 String sql = "delete from sort where sid = ?"; //定义Object数组,存储?中的参数 Object[] params = {"17"}; //调用QueryRunner方法的update int row = qr.update(con, sql, params); //判断insert,update,delete执行是否成功,对返回值row判断,if(row>0)执行成功 if (row > 0) { System.out.println(row + "条代码收到影响,执行成功!"); }else { System.out.println("执行失败!"); } 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 = {"花卉", 168, "情人节快乐",4}; //调用QueryRunner方法的update int row = qr.update(con, sql, params); System.out.println(row); DbUtils.closeQuietly(con); } //添加数据:定义方法,使用调用QueryRunner类的方法updata向数据库表中,添加数据 public static void insert() throws SQLException { //建立QueryRunner类对象 QueryRunner qr = new QueryRunner(); String sql = "insert into sort (sname, sprice, sdesc) values(?, ?, ?)"; //将三个?占位符的实际参数,写在数组中 Object[] params = {"体育用品",289,"购买体育用品"}; //调用QuerRunner类的方法updata执行SQL语句 int row = qr.update(con, sql, params); System.out.println(row); DbUtils.closeQuietly(con); } }
A: 概念编程
JavaBean就是一个类,在开发中经常使用封装数据。具备以下特性数组
1.须要实现接口:java.io.Serializable ,一般实现接口这步骤省略了,不会影响程序。tomcat
A: QueryRunner实现查询操做服务器
结果集 | 处理方式 |
---|---|
ArrayHandler | 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每个元素就是这条记录中的每个字段的值. |
ArrayListHandler | 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中. |
BeanHandler | 将结果集中第一条记录封装到一个指定的javaBean中。 |
BeanListHandler | 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 |
ColumnListHandler | 将结果集中指定的列的字段值,封装到一个List集合中 |
ScalarHandler | 它是用于单数据。例如select count(*) from 表操做 |
MapHandler | 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据 |
MapListHandler | 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合 |
A: QueryRunner数据查询操做ide
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ arrayHandler(); } /* * 结果集第一种处理方法, ArrayHandler * 将结果集的第一行存储到对象数组中 Object[] */ public static void arrayHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //调用方法query执行查询,传递链接对象,SQL语句,结果集处理方式的实现类 //返回对象数组 Object[] result = qr.query(con, sql, new ArrayHandler()); for(Object obj : result){ System.out.print(obj); } } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ arrayListHandler(); } /* * 结果集第二种处理方法,ArrayListHandler * 将结果集的每一行,封装到对象数组中, 出现不少对象数组 * 对象数组存储到List集合 */ public static void arrayListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //调用query方法,结果集处理的参数上,传递实现类ArrayListHandler //方法返回值 每行是一个对象数组,存储到List List<Object[]> result= qr.query(con, sql, new ArrayListHandler()); //集合的遍历 for( Object[] objs : result){ //遍历对象数组 for(Object obj : objs){ System.out.print(obj+" "); } System.out.println(); } } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ beanHandler(); } /* * 结果集第三种处理方法,BeanHandler * 将结果集的第一行数据,封装成JavaBean对象 * 注意: 被封装成数据到JavaBean对象, Sort类必须有空参数构造 */ public static void beanHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //调用方法,传递结果集实现类BeanHandler //BeanHandler(Class<T> type) Sort s = qr.query(con, sql, new BeanHandler<Sort>(Sort.class)); System.out.println(s); } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ beanListHander(); } /* * 结果集第四种处理方法, BeanListHandler * 结果集每一行数据,封装JavaBean对象 * 多个JavaBean对象,存储到List集合 */ public static void beanListHander()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //调用方法query,传递结果集处理实现类BeanListHandler List<Sort> list = qr.query(con, sql, new BeanListHandler<Sort>(Sort.class)); for(Sort s : list){ System.out.println(s); } } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ columnListHandler(); } /* * 结果集第五种处理方法,ColumnListHandler * 结果集,指定列的数据,存储到List集合 * List<Object> 每一个列数据类型不一样 */ public static void columnListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort "; //调用方法 query,传递结果集实现类ColumnListHandler //实现类构造方法中,使用字符串的列名 List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("sname")); for(Object obj : list){ System.out.println(obj); } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ scalarHandler(); } /* * 结果集第六种处理方法,ScalarHandler * 对于查询后,只有1个结果 */ public static void scalarHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT COUNT(*) FROM sort"; //调用方法query,传递结果集处理实现类ScalarHandler long count = qr.query(con, sql, new ScalarHandler<Long>()); System.out.println(count); } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ mapHandler(); } /* * 结果集第七种处理方法,MapHandler * 将结果集第一行数据,封装到Map集合中 * Map<键,值> 键:列名 值:这列的数据 */ public static void mapHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //调用方法query,传递结果集实现类MapHandler //返回值: Map集合,Map接口实现类, 泛型 Map<String,Object> map = qr.query(con, sql, new MapHandler()); //遍历Map集合 for(String key : map.keySet()){ System.out.println(key+".."+map.get(key)); } } }
public class QueryRunnerDemo1 { private static Connection con = JDBCUtilsConfig.getConnection(); public static void main(String[] args) throws SQLException{ mapListHandler(); } /* * 结果集第八种处理方法,MapListHandler * 将结果集每一行存储到Map集合,键:列名,值:数据 * Map集合过多,存储到List集合 */ public static void mapListHandler()throws SQLException{ QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //调用方法query,传递结果集实现类MapListHandler //返回值List集合, 存储的是Map集合 List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler()); //遍历集合list for( Map<String,Object> map : list ){ for(String key : map.keySet()){ System.out.print(key+"..."+map.get(key)); } System.out.println(); } } }
A: 链接池介绍
A: 链接池概念规范
A: DataSource接口
a: DBCP链接池介绍
a: jar包介绍
b: 导入jar包
/* * 链接池jar包中,定义好一个类 BasicDataSource * 实现类数据源的规范接口 javax.sql.DataSource */ public class DataSoruceDemo { public static void main(String[] args) { //建立DataSource接口的实现类对象 //实现类, org.apache.commons.dbcp BasicDataSource dataSource = new BasicDataSource(); //链接数据库的4个最基本信息,经过对象方法setXXX设置进来 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mybase"); dataSource.setUsername("root"); dataSource.setPassword("123"); try{ //调用对象方法getConnection获取数据库的链接 Connection con = dataSource.getConnection(); System.out.println(con); }catch(SQLException ex){ // System.out.println(ex); ex.printStackTrace(); throw new RuntimeException("数据库链接失败"); } } }
a: 常见配置
类 属性 描述
须项
driverClassName 数据库驱动名称 url 数据库的地址 username 用户名 password 密码
本项(扩展)
maxActive 最大链接数量 minIdle 最小空闲链接 maxIdle 最大空闲链接 initialSize 初始化链接
/* * 使用DBCP实现数据库的链接池 * 链接池配置,自定义类, * 最基本四项完整 * 对于数据库链接池其余配置,自定义 */ import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class JDBCUtils{ //建立出BasicDataSource类对象 private static BasicDataSource datasource = new BasicDataSource(); //静态代码块,对象BasicDataSource对象中的配置,自定义 static{ //数据库链接信息,必须的 datasource.setDriverClassName("com.mysql.jdbc.Driver"); datasource.setUrl("jdbc:mysql://localhost:3306/day33_user"); datasource.setUsername("root"); datasource.setPassword("123"); //对象链接池中的链接数量配置,可选的 datasource.setInitialSize(10);//初始化的链接数 datasource.setMaxActive(8);//最大链接数量 datasource.setMaxIdle(5);//最大空闲数 datasource.setMinIdle(1);//最小空闲 } //定义静态方法,返回BasicDataSource类的对象 public static DataSource getDataSource(){ return datasource; } }
/* * 测试写好的工具类, * 提供的是一个DataSource接口的数据源 * QueryRunner类构造方法,接收DataSource接口的实现类 * 后面,调用方法update,query,无需传递他们Connection链接对象 */ import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; import cn.itcast.jdbcutils.JDBCUtils; public class QueryRunnerDemo{ public static void main(String[] args) { select(); } //定义2个方法,实现数据表的添加,数据表查询 //QueryRunner类对象,写在类成员位置 private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //数据表查询 public static void select(){ String sql = "SELECT * FROM sort"; try{ List<Object[]> list = qr.query(sql, new ArrayListHandler()); for(Object[] objs : list){ for(Object obj : objs){ System.out.print(obj+"\t"); } System.out.println(); } }catch(SQLException ex){ throw new RuntimeException("数据查询失败"); } } //数据表添加数据 public static void insert(){ String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)"; Object[] params = {"水果",100.12,"刚刚上市的核桃"}; try{ int row = qr.update(sql, params); System.out.println(row); }catch(SQLException ex){ throw new RuntimeException("数据添加失败"); } } }