环境准备:
包结构:
mysql导出sql脚本:
//product
CREATE TABLE `product` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`description` varchar(20) DEFAULT NULL,
`create_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
==============================
//user
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(10) DEFAULT NULL,
`password` varchar(10) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
===============================
使用dbutils:
导入jar包:commons-dbutils-1.3.jar
测试:
//dbutils: jdbc 的工具类. 使用它可以更好的使用JDBC
@Test
public void testDbutilsUpdate(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner();
//2. 调用其方法进行 CRUD 操作: create read update delete
//2.1 update(Connection, sql, args); 可以进行 CREATE、UPDATE 和 DELETE 操作
Connection connection = null;
try {
connection = JdbcUtils.getConnection();
String sql="insert into product(name,description,create_date) values(?,?,?)";
//String sql="update product set name=?,description=?,create_date=? where id=?";
//String sql = "delete from product where id=?";
queryRunner.update(connection, sql, "PRO 5","MEIZU", new Date());
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}
=======================================
@Test
public void testDbUtilsQuery(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner();
//2. 进行READ操作: 调用QueryRunne的query()方法
Connection connection = null;
try {
connection = JdbcUtils.getConnection();
String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
+ "FROM product";
//选择合适的 ResultSetHandler.
ResultSetHandler<List<Product>> rsh = new BeanListHandler(Product.class);
List<Product> products = queryRunner.query(connection, sql, rsh);
System.out.println(products);
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}
==================================
@Test
public void testDbUtilsResultSetHandler(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner();
//2.进行READ操作: 调用QueryRunne的query()方法
Connection connection = null;
try {
connection = JdbcUtils.getConnection();
String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
+ "FROM product";
//具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
//1. 若传入 ArrayListHandler, 则返回的是 数组类型的 List.
// ResultSetHandler rsh = new ArrayListHandler();
//2. 若传入 MapListHandler, 则返回的是 Map 类型的 List
ResultSetHandler rsh = new MapListHandler();
//选择合适的 ResultSetHandler.
List results = queryRunner.query(connection, sql, rsh);
for(Object object: results){
System.out.println(object);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}
=========================================
@Test
public void testDbUtilsResultHandler2(){
//1. 创建 QueryRunner 的实例
QueryRunner queryRunner = new QueryRunner();
//2.进行READ操作: 调用QueryRunne的query()方法
Connection connection = null;
try {
connection = JdbcUtils.getConnection();
String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
+ "FROM product WHERE id = ?";
//具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
ResultSetHandler rsh = new ArrayHandler();
//选择合适的 ResultSetHandler.
Object results = queryRunner.query(connection, sql, rsh, 1);
System.out.println(results);
} catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.close(connection);
}
}
小结:
1、 进行 UPDATE 操作(增、删、改): 调用 QueryRunner 的
public int update(Connection conn, String sql, Object… params) 方法即可.
2、进行 READ (查)操作: 调用 QueryRunner 的
public T query(Connection conn, String sql, ResultSetHandler rsh,
Object… params) 方法.
=================================
关于READ操作的关键点是:ResultSetHandler
它是结果集处理器: 可以把结果集转为需要的目标类型.
经典的实现:
BeanHandler: 适用于返回单条数据. 把结果集转为一个 JavaBean 对象返回
BeanListHandler: 适用于返回多条数据. 把结果集转为一个 JavaBean 的集合返回
MapHandler: 适用于返回单条数据. 把结果集转为一个 Map 对象返回.
MapListHandler: 适用于返回多条数据. 把结果集转为以个 Map 的 List 返回
==============
此部分结果集的处理还涉及到集合知识点,需要学习,未完待续!