平时我们使用jdbc的时候经常需要把resultset-->List,以被其他层调用,其实我们使用o/r开源工具Torque,hibernate就有类似包装好的,非常好用.
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; //返回方法
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.List;
import org.apache.log4j.Logger;
import com.scitel.crms.business.dao.*;
/**
*
* <p>Title:运用类反射机制来实现 </p>
* <p>Description:持久化层DAO层简化:通用查询类 </p>
*/
public class QueryUtil extends BasicDAO {
private static Logger log = Log.getLog(QueryUtil.class);
private Connection con = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
/**
* 完成ResultSet对象向List对象为集合的对象的转化
* @param sql,指定的查询Sql
* @param className,Sql相对应的JavaBean/FormBean类的名字:具体的Vo值对象或ActionForm
* @Return:以类className为一条记录的结果集,
* 完成ResultSet对象向List对象为集合的className对象的转化
*/
public List Select(String sql, String className) {
List arr = null; //数组来处理
try {
con = DBTool.getDAOConnection(); //取得数据库连接
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(); //执行查询
String recordValue = ""; //构造返回的结果集
Object c1 = null;
arr = new ArrayList();
ResultSetMetaData rsmd = rs.getMetaData(); //取得数据表中的字段数目,类型等返回结果
//是以ResultSetMetaData对象保存
int columnCount = rsmd.getColumnCount(); //列的总数
while (rs.next()) {
c1 = Class.forName(className).newInstance(); //类的实例化
for (int i = 1; i <= columnCount; i++) {
if (rs.getString(rsmd.getColumnName(i)) != null) {
recordValue = rs.getString(rsmd.getColumnName(i));
} else {
recordValue = "";
}
Method
m = c1.getClass().getMethod(getSetMethodName(rsmd.getColumnName(i)),
new Class[] {recordValue.getClass()});
m.invoke(c1, new Object[] {recordValue});
}
log.info("取得ActionForm或VO中的set方法" +
getSetMethodName(rsmd.getColumnName(1)));
arr.add(c1);
}
} catch (SQLException ex) {
} catch (ClassNotFoundException e) {
} catch (NoSuchMethodException e) {
} catch (InvocationTargetException e) {
} catch (IllegalAccessException e) {
} catch (InstantiationException e) {
} finally {
release(rs, pstmt, con); //释放资源
}
return arr;
}
//在JavaBean封装的商业逻辑中调用Select 方法,然后在JSP页面上显示出来:
//Function:取得用户列表
//Para:
//Return:返回用户列表
public List getUsers(){
List ret=null;
DatabaseManage db=new DatabaseManage();
String sql=" select usr_id,usr_name "
+" from users " ;
ret=db.Select(sql," com.mcsky. webis.system.UsersActionForm");
return ret;
}
public static void main(String[] args) {
//方法测试通过
String sql =
"select chkr_code,chkr_name,chkr_value chkr_regular from checkrule "; //查询告警用户过滤设置明细
QueryUtil util = new QueryUtil();
List arr = null;
arr = util.Select(sql, "com.scitel.crms.web.form.TestActionForm");
System.out.println("集合大小------>>>>>>>" + arr.size());
//System.out.println("集合大小------>>>>>>>"+arr.toArray().toString());
}
}
分享到:
相关推荐
此异常通常发生在使用JDBC驱动连接SQL Server数据库并尝试执行某些操作(如分页)时。具体而言,当使用`setFirstResult()`和`setMaxResults()`方法对查询结果集进行限制时,如果结果集被标记为只进(forward-only)...
在Java编程中,ResultSet是处理数据库查询结果的主要接口,它由Statement或PreparedStatement对象执行SQL查询后返回。而JavaBean是一种符合特定规范的Java类,通常用于封装数据,便于数据的传输和操作。当我们从...
集合在这里可能指的是Java中的集合框架,它在处理数据库结果集时起着重要作用,例如将结果集转化为List或其他集合对象。 【文件名称列表】中的"Store"可能代表项目的主目录或者一个具体的类文件,这通常是项目的...
综上所述,JSP工程通过JDBC连接SQL Server 2005,主要涉及加载驱动、创建连接、执行SQL、处理结果集、在JSP页面展示数据以及关闭资源等步骤。理解这些概念和操作,将有助于你在实际项目中实现数据库的交互。
我们可以遍历这个结果集,将每一行的数据转换为Java对象并存入List集合。 ```java List<MyObject> list = new ArrayList(); while (rs.next()) { MyObject obj = new MyObject(); obj.setId(rs.getInt("id")); ...
本主题将探讨如何在Hibernate分页类和JDBC的SQL分页方法之间实现完美的融合,以提高性能并提供更好的用户体验。 首先,让我们了解一下Hibernate的分页功能。Hibernate提供了一种方便的方式来处理分页查询,通过...
当我们通过JDBC执行SQL查询并获取结果集(ResultSet)时,通常我们需要将这些数据转换为更易于处理的数据结构,如List。本篇文章将详细讲解如何将ResultSet转换为对应的List集合。 首先,我们了解ResultSet对象。...
在Spring Boot框架中,JDBC(Java Database Connectivity)是一个常用的数据访问组件,它允许开发者直接执行SQL语句来与数据库进行交互。本篇文章将详细探讨Spring Boot JDBC的使用,包括如何配置、创建数据源、执行...
3. **处理结果**:提供方法处理查询结果,如将ResultSet转换为List或其他数据结构。 4. **关闭资源**:在操作完成后自动关闭连接和其他资源。 5. **事务管理**:支持开启和提交事务,处理异常时可以回滚事务。 6....
JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它为Java开发者提供了一种统一的方式去访问各种关系型数据库。简单来说,JDBC就像是一个桥梁,它使得Java应用程序能够与不同的数据库进行...
在这个“java jdbc的图书管理 带sql带增删改查 idea运行”的项目中,我们将探讨如何利用Java和JDBC在IntelliJ IDEA集成开发环境中实现一个简单的图书管理系统,包括对图书数据的基本操作:添加、删除、修改和查询。...
封装JDBC操作可以简化数据库访问代码,常见的封装形式包括将查询结果封装为Map、Bean或List,以及应用策略模式和模板模式来提高代码的可扩展性和可维护性。 #### 十五、高级JDBC主题 深入探讨JDBC的高级主题,包括...
这个查询方法接受一个SQL语句和可变参数,通过PreparedStatement设置参数,执行查询并遍历结果集,将每一行数据转化为Map存储在List中返回。 对于批量查询,可以稍微修改上述方法,使用数组或集合传递多个参数,并...
next() 方法在 ResultSet 对象没有一行记录时返回 false,因此可以在 while 循环中使用它来遍历结果集,也可以利用该方法判断结果集是否为空。 getRow() 方法是 ResultSet 对象的一个重要方法,它可以返回当前指针...
JDBC,全称为Java Database Connectivity(Java数据库连接),是一种用于执行SQL语句的Java API,它为多种关系数据库提供了统一的访问接口。JDBC由一系列用Java语言编写的类和接口组成,主要集成在`java.sql`和`...
在实际应用中,我们通常会使用Connection对象建立与数据库的连接,Statement或PreparedStatement对象来执行SQL,以及ResultSet对象来处理查询结果。 在分页查询时,我们需要考虑两个主要参数:当前页数和每页显示的...
JDBC工具包通常包括一系列的类和接口,它们使得在Java应用程序中执行SQL语句、处理结果集以及管理数据库连接变得简单。 **JDBC核心组件** 1. **DriverManager**: 这是JDBC的核心,负责管理数据库驱动程序。通过`...
- 提供处理结果集的工具方法,如`getResultSetToList(ResultSet rs, Class<T> clazz)`,将结果集转换为List对象。 这样做有以下优点: 1. **代码复用**:封装后的JDBC操作可以应用于项目中的任何地方,减少重复...
内部实现分页查询,返回结果集或者转化为List对象。 9. **优化与注意事项**: - 考虑使用连接池管理数据库连接,如C3P0或HikariCP,提高性能。 - SQL的书写应遵循最佳实践,避免全表扫描,优化查询效率。 - 注意...