目录
使用JDBC开发的过程中,会发现代码比较的冗余,为了简化开发,我们可以使用apache commons组件一个成员:DBUtils
在开发资源首先要添加commons-dbutils-1.6.jar 或者其他版本 官方下载链接:http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi
一、增、删、改操作
调用QueryRunner类的方法 update (Connection con,String sql,Object...param)
在此案例中,只演示insert操作,update和delete操作只需要更改对应的SQL语句即可
public static void insert() throws Exception{
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
// 注册数据库驱动,并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
// SQL语句
String sql = "INSERT INTO student(sname, sage) values(?,?) ";
/*
* Connection conn:数据库连接对象 String sql:SQL语句
* Object...params:可变参数,传递SQL语句中的占位符
*/
Object[] params = { "王五", 20 };
int result = qr.update(conn, sql, params); // 返回的int值代表更新了行数
System.out.println("影响了" + result + "行");
// 关闭资源,使用DbUtils中的closeQuietly()方法
DbUtils.closeQuietly(conn);
}
二、查询操作
1.ArrayHandler
ArrayHandler:将查询得到的结果集的第一条记录封装到一个Object数组中,数组中的每一个元素是这条记录的每一个字段对应的值
public static void arrayHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
//调用query()方法,将结果集处理实现类ArrayHandler对象传入
Object[] objs = qr.query(conn, sql, new ArrayHandler());
//增强for遍历数组
for(Object obj : objs){
System.out.println(obj);
}
//释放资源
DbUtils.closeQuietly(conn);
}
2.ArrayListHandler
ArrayListHandler:将查询到的结果集的每一条记录封装到Object数组中,再将这些数组封装到一个List集合中
public static void arrayListHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
//调用query()方法,将结果集处理实现类ArrayListHandler对象传入
List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
//增强for遍历集合
for(Object[] objs : list){
//增强for遍历数组
for(Object obj : objs){
System.out.print(obj);
}
System.out.println();
}
//释放资源
DbUtils.closeQuietly(conn);
}
3.BeanHandler
BeanHandler:将查询到的结果集第一条记录用JavaBean封装
public static void beanHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
/*
* 调用query()方法,将结果集处理实现类BeanHandler对象传入
* 此方法为泛型方法,泛型内写JavaBean对象
*/
Student stu = qr.query(conn, sql, new BeanHandler<Student>(Student.class));
//JavaBean对象重写了toString()方法,可以直接输出
System.out.println(stu);
//释放资源
DbUtils.closeQuietly(conn);
}
4.BeanListHandler
BeanListHandler:将查询得到的结果集每一条记录封装到JavaBean对象中,再将JavaBean对象封装到List集合中
public static void beanListHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
/*
* 调用query()方法,将结果集处理实现类BeanListHandler对象传入
*/
List<Student> list = qr.query(conn, sql, new BeanListHandler<Student>(Student.class));
//增强for遍历List集合
for(Student s : list){
System.out.println(s);
}
//释放资源
DbUtils.closeQuietly(conn);
}
5.ColumnListHandler
ColumnListHandler:将查询到的结果集根据指定的列名封装到List集合中
public static void columnListHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
/*
* 调用query()方法,将结果集处理实现类ColunmListHandler对象传入
* 在构造方法中传入指定的列名,可以是查询结果集列的索引,也可以是列名,建议使用列名
* 由于列的数据可以是很多种,所以泛型中传入Object
*/
List<Object> list = qr.query(conn, sql, new ColumnListHandler<Object>("sname"));
//增强for遍历List集合
for(Object obj : list){
System.out.println(obj);
}
//释放资源
DbUtils.closeQuietly(conn);
}
6.ScalarHandler
ScalarHandler:用于单个数据,如count(*)等聚合函数
public static void scalarHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT COUNT(*) FROM student";
/*
* 调用query()方法,将结果集处理实现类ScalarHandler对象传入
* 此处使用count(*)函数作为示例,底层使用long类型进行记录,所以泛型为Long
*/
long count = qr.query(conn, sql, new ScalarHandler<Long>());
System.out.println(count);
//释放资源
DbUtils.closeQuietly(conn);
}
7.MapHandler
MapHandler:将查询得到的结果集的第一条记录封装到一个Map集合中,key:列名,value:数据
public static void mapHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
/*
* 调用query()方法,将结果集处理实现类MapHandler对象传入
* key:列名,用String
* value:数据,数据有很多种类型,所以使用Object
*/
Map<String, Object> map = qr.query(conn, sql, new MapHandler());
//增强for遍历Map集合
for(String key : map.keySet()){
System.out.println(key +"="+ map.get(key));
}
//释放资源
DbUtils.closeQuietly(conn);
}
8.MapListHandler
MapListHandler:将查询得到的结果集的每一条记录封装到Map集合中,再将Mao集合封装到一个List集合中
public static void mapListHandler() throws Exception{
//注册数据库驱动并连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url, user, password);
//创建QueryRunner对象
QueryRunner qr = new QueryRunner();
//SQL语句
String sql = "SELECT * FROM student";
/*
* 调用query()方法,将结果集处理实现类MapHandler对象传入
* key:列名,用String
* value:数据,数据有很多种类型,所以使用Object
*/
List<Map<String, Object>> list = qr.query(conn, sql, new MapListHandler());
//增强for遍历list集合
for(Map<String, Object> map : list){
//增强for遍历Map集合
for(String key : map.keySet()){
System.out.print(key+"="+map.get(key));
}
System.out.println();
}
//释放资源
DbUtils.closeQuietly(conn);
}