Java中的DataTable等价物
Java中是否有C#DataTable等价物?
最近提出的类似问题 。 ResultSet当然不是直接等效的,因为它只适用于与数据库的活动连接,而DataTable可以“脱机”使用。
根据个人经验,我会说在Java中没有直接的等价物(尽管没有尝试过javax.sql.rowset.WebRowSet
)。 你要么使用普通的SQL,而java.sql.ResultSet
就是你的朋友。 或者您使用一些ORM工具,如Hibernate,Cayenne,Toplink等等。 或者你建立自己的(不是我鼓励这个,但我认为已经成功完成了多个项目)。
试试这个框架:
Casper数据集
它是一个内存数据集库,它是通用的,也是类型安全的。 您可以:
- 从关系查询(或从任何其他程序源)自动提取数据,
- 针对数据集发出复杂的链式查询,
- 通过指定特定列的索引来优化给定数据集。
它易于使用,没有任何重要的依赖性。 它还兼容java.sql.ResultSet,因此可以轻松地将其集成到任何查询关系数据库的现有应用程序中
考虑使用
java.sql.ResultSet Statement s = conn.createStatement(); ResultSet rs = s.executeQuery("select * from generic_table"); ResultSetMetaData md = rs.getMetaData();
不 – 不在标准库(即Java API)中。
我使用的解决方法是JTable。 它没有正确的DataTable的强大数据function,但它允许您获取一些数据并将其绑定到具有某种结构的控件。
class TableModel extends AbstractTableModel { String[] columnNames = {“FirstName”,”LastName”,”Title”}; Object[][] rowData= {{'John,”Smith”,”President”},{“John”,”Doe”,”Employee”}}; public int getColumnCount() { return columnNames.length; } public int getRowCount() { return rowData.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } }
然后简单地使用你:
JTable table = new JTable(new TableModel());
同样,这是快速而简单的,如果您处理大量数据,我建议使用适当的ORM工具。
从标准库DefaultTableModel
是一个很好的类。
ResultSet set = s.getResultSet(); ResultSetMetaData metaData = set.getMetaData(); int totalColumn = metaData.getColumnCount(); Object[] dataRow = new Object[totalColumn]; if(set!= null) { for(int i=1;i<=totalColumn;i++) { table.addColumn(metaData.getColumnName(i)); } while(set.next()) { for(int i=1;i<=totalColumn;i++) { dataRow[i-1] = set.getObject(i); } table.addRow(dataRow); } }