Java中的通用表结构(如ResultSet)

时间:2010-05-20 15:34:16

标签: java data-structures resultset

  

可能重复:
  Table like java data structure

有没有人知道我是否有一个很好的通用基于表格的结构来管理数据? ResultSet是一个接口,如果我想要没有数据库的类似功能,我是不是必须完全实现一些东西? Apache Commons Collections似乎没有任何直接适用的东西。

5 个答案:

答案 0 :(得分:6)

通常为此使用ListSet Javabeans。每个Javabean反过来代表一个真实世界实体,就像数据库中的一行。例如User

public class User {
    private Long id;
    private String name;
    private Integer age;
    // Add/generate getters+setters.
}

List<User> users = new ArrayList<User>();
users.add(new User(1L, "foo", 30));
users.add(new User(2L, "bar", 20));
//...

List提供了通过索引快速访问的方法。

对于未确定数量的属性(列),您可以考虑使用Map<String, Object>代替属性(列)名称。

List<Map<String, Object>> table = new ArrayList<Map<String, Object>>();
Map<String, Object> row = new HashMap<String, Object>();
row.put("id", 1L);
row.put("name", "foo");
row.put("age", 30);
table.add(row);
// ...

它只比简单的Javabean增加了更多的开销,因为这些字符串键也需要存储在堆中。

如果您不关心列名称,那么您也可以继续使用List<List<Object>>或甚至更不灵活的Object[][]。您可以通过xy轻松访问元素。

答案 1 :(得分:2)

为什么不使用内存数据库,例如HSQLDB或H2。它们非常轻量级,快速,提供您想要的JDBC接口,并提供您提到的JOIN功能。

答案 2 :(得分:2)

Google Guava个库提供了几个通用Table实现 - HashBasedTable,TreeBasedTable。这些类是通用的,因此任何类都可以充当行/列键。

文档示例:

Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4.0);
weightedGraph.put(v1, v3, 20.0);
weightedGraph.put(v2, v3, 5.0);

weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5

答案 3 :(得分:0)

也许类似DefaultTableModel的内容符合您的要求。它通常与JTable一起使用来显示数据,但它可以单独使用。

或者基于RowTableModel的{​​{3}}还有一些动态功能,可让您更轻松地访问数据行。

答案 4 :(得分:0)

Java 6有一个CachedRowSet接口,并附带一个Sun类CachedRowSetImpl。这可能是最接近你想要的东西。它的设计目标是ResultSet

如果这适合你,那可能就是你正在寻找的。

如果没有,您可能会在填写正确的问题时遇到问题。