List<Actor> list = queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);
语句旁打上断点 , 点击debug , 点击step into
文章插图
光标跳转到如下方法:
public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh,Object... params) throws SQLException {PreparedStatement stmt = null;//定义PreparedStatement对象ResultSet rs = null;//接收返回的resultSetT result = null;//返回ArrayListtry {stmt = this.prepareStatement(conn, sql);//创建PreparedStatementthis.fillStatement(stmt, params);//对SQL语句进行?赋值rs = this.wrap(stmt.executeQuery());//执行SQL , 返回resultSetresult = rsh.handle(rs);//将返回的resultSet-->封装到ArrayList中[使用反射 , 对传入的class对象进行处理]} catch (SQLException e) {this.rethrow(e, sql, params);} finally {try {close(rs);//关闭resultSet} finally {close(stmt);//关闭preparedStatement}}return result;//返回ArrayList}
10.5.5ApDBUtils查询使用DBUtils+数据库连接池(德鲁伊)方式 , 完成对表actor的查询操作1.多行多列
package li.jdbc.datasource;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.junit.Test;import java.sql.Connection;import java.sql.SQLException;import java.util.List;public class DBUtils_USE {//返回结果是多行多列的情况@Testpublic void testQueryMany() throws SQLException {//得到连接(Druid)Connection connection = JDBCUtilsByDruid.getConnection();//创建QueryRunnerQueryRunner queryRunner = new QueryRunner();//然后就可以执行相关的方法 , 返回ArrayList结果集//sql语句也可以查询部分的列,没有查询的属性就在actor对象中置空String sql = "Select id,name from actor where id >=?";List<Actor> list =queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);System.out.println("输出集合的信息:");for (Actor actor : list) {System.out.print(actor);}//释放资源JDBCUtilsByDruid.close(null, null, connection);}}
文章插图
2.单行多列
package li.jdbc.datasource;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.junit.Test;import java.sql.Connection;public class DBUtils_USE {//演示DBUtils+druid完成-返回的结果是单行记录(单个对象)的情况-单行多列@Testpublic void testQuerySingle() throws Exception {//1.得到连接Connection connection = JDBCUtilsByDruid.getConnection();//2.创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();//3.执行相关方法 , 返回单个对象String sql = "Select * from actor where id =?";//因为我们返回的是单行记录 , 对应单个对象 , // 因此使用的 Handler是BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中Actor actor =queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 2);System.out.println(actor);//释放资源JDBCUtilsByDruid.close(null, null, connection);}}
文章插图
3.单行单列
package li.jdbc.datasource;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.ScalarHandler;import org.junit.Test;import java.sql.Connection;public class DBUtils_USE {//演示DBUtils+druid完成-查询结果是单行单列的情况-返回的就是Object@Testpublic void testScalar() throws Exception {//Scalar 单一值//获取连接Connection connection = JDBCUtilsByDruid.getConnection();//创建QueryRunner对象QueryRunner queryRunner = new QueryRunner();//执行相关方法 , 返回单行单列String sql = "Select name from actor where id =?";//因为返回的是一个对象 , 因此使用的 Handler是 ScalarHandlerObject obj = queryRunner.query(connection, sql, new ScalarHandler(), 1);System.out.println(obj);//释放资源JDBCUtilsByDruid.close(null,null,connection);}}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 一篇文章让你搞懂Java中的静态代理和动态代理
- 生肖鼠女与什么生肖最佳配 为什么生肖牛和生肖龙是鼠女最佳配对
- 生肖兔女跟什么生肖男配
- 马和马相配婚姻如何 两马结婚好不好
- 生肖牛婚姻和什么生肖最配
- 格力和海尔空调哪个好 格力海尔空调质量比较
- 生肖兔男士和什么生肖最配属兔男和什么属相最合适
- 选购液晶电视品牌推荐 海信创维和长虹品牌
- 创维55v8e和55v9e电视机的区别 哪款上档次
- 七杀格女命和劫财格女命 朋友相处要细致