Java 中的通用表结构(如 ResultSet)
可能的重复:
类似java数据结构的表
有谁知道是否有一个好的通用的基于表的我可以用来操作数据的结构? ResultSet 是一个接口,所以如果我想要没有数据库的类似功能,我是否必须完全实现某些东西? Apache Commons Collections 似乎没有立即合适的东西。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
通常您使用 <代码>列表或为此
设置
Javabean。每个 Javabean 又代表一个现实世界的实体,就像数据库中的一行。例如User
:和
List
提供了通过索引快速访问的方法。对于不确定数量的属性(列),您可以考虑使用
Map
而不是其中键表示属性(列)名称。它只比简单的 Javabean 增加了一点开销,因为这些字符串键也需要存储在堆中。
如果您不关心列名称,那么您也可以直接使用
List
,甚至可能使用不太灵活的>
Object[][].使用这两种方法,您可以轻松地通过
x
和y
访问元素。Usually you use a
List
orSet
of Javabeans for this. Each Javabean in turn represents one real world entity, like a row in a database. For example anUser
:with
The
List
provides methods for fast access by index.For an undetermined amount of properties (columns) you may consider to use a
Map<String, Object>
instead where the key represents the property (column) name.It only adds a bit more overhead than a simple Javabean since those string keys needs to be stored in the heap as well.
If you don't care about column names, then you can also just go ahead with a
List<List<Object>>
or maybe even a less flexibleObject[][]
. With both you can easily access elements byx
andy
.为什么不使用内存数据库,例如 HSQLDB 或 H2。它们非常轻量且快速,提供您似乎想要的 JDBC 接口,并且还提供您提到的 JOIN 功能。
Why not use an In-Memory Database, such as HSQLDB or H2. They are very lightweight and fast, provide the JDBC interface you seem to want and also provide the JOIN functionality you mention.
Google Guava 库提供了多种通用Table 实现 - HashBasedTable,TreeBasedTable。这些类是通用的,因此任何类都可以充当行/列键。
文档中的示例:
Google Guava libraries offer several general purpose Table implementations - HashBasedTable, TreeBasedTable. The classes are generic so any class can act as a row/column key.
Example from the docs:
Java 6 有一个 CachedRowSet 接口,并附带一个 Sun 类 CachedRowSetImpl。这可能是最接近您正在寻找的现成库存的东西。它被设计为由
ResultSet
填充。如果这适合您,那么它可能正是您正在寻找的。
如果没有,您在正确填充它时可能会遇到问题。
Java 6 has a
CachedRowSet
interface and comes with a Sun class,CachedRowSetImpl
. This probably is the closest thing stock out of the box to what you're looking for. It's designed to be populated by aResultSet
.If that suits you it's probably exactly what you're looking for.
If not, you may have issues populating it properly.
也许像
DefaultTableModel
这样的东西会满足您的要求。它通常与 JTable 一起使用来显示数据,但也可以单独使用。或者基于
BeanTableModel
RowTableModel
有一些更多的动态功能,可以让您更轻松地访问数据行。Maybe something like the
DefaultTableModel
will meet your requirements. It is generally used with a JTable to display data but it can be used stand alone.Or the
BeanTableModel
based on theRowTableModel
has a few more dynamic features that allows you to access rows of data easier.