将数据库结果集解析为对象列表

时间:2010-11-23 11:50:34

标签: java list jdbc object resultset

我试图从数据库中包含的表中获取所有数据,并将其解析为List。我尝试了一些不同的技术,但无法使其正常工作。我正在尝试序列化ResultSet,以便我可以通过套接字发送它。我到目前为止的代码是:

public Object readJavaObject(String query, Connection con) throws Exception
{        
    PreparedStatement stmt = con.prepareStatement(query);
    //stmt.setString(1, id);
    query_results = stmt.executeQuery();
    while (query_results.next())
    {
        dataObject = query_results.getObject(1);
    }
    query_results.close();
    stmt.close();

    return dataObject;
}

public void run()
{
    try
    {
        Class.forName(dbClass);
        con = DriverManager.getConnection (dbUrl, user, pass);
        query = "SELECT * FROM Bench_table";
        dataList = (List) this.readJavaObject(query, con);
        con.close();
    }
}

我不确定在readJavaObject周围编写什么代码。任何人都可以帮忙指出问题所在吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

看看DbUtils(来自apache-commons)。

如果您需要更复杂的解决方案来将sql结果映射到java对象,请查看object-relational mapping。在Java中,标准是JPA(Java Persistence API),其中Hibernate,EclipseLink和OpenJPA是最着名的实现者。

答案 1 :(得分:2)

您的代码存在一些问题。

  1. 你循环查看结果但是 仅返回最后一行的数据。 而是在中创建一个List readJavaObject方法并添加一个 每个元素都通过循环。
  2. 我假设您想要所有数据,而不是在第一列中获取该项目。您将需要更具体地使用哪些“get”方法从ResultSet中提取数据。可能创建一个POJO来表示一行数据,然后在循环内填充它并将其存储在列表中。
  3. 假设您使用POJO,您可能希望在列表中使用泛型,以便更轻松地从中获取项目而无需进行强制转换。

答案 2 :(得分:0)

我不知道您想要实现的目标,但我可以向您介绍DAO (Data Access Object) Pattern吗?

答案 3 :(得分:0)

我最近发现了CachedRowSet,它正是OP所需要的。它特别允许序列化ResultSet,并在需要时恢复原始文件。