Java中的DataTable等价物

14

Java中是否有与C# DataTable相当的东西?

6个回答

7

这是一个最近提出的类似问题(已经被问过)。ResultSet并不是直接等价的,因为它只能在与数据库的活动连接中使用,而DataTable可以“离线”使用。

根据个人经验,我认为在Java中没有直接的等价物(虽然没有尝试过javax.sql.rowset.WebRowSet)。你可以选择使用普通的SQL,java.sql.ResultSet是你的好朋友。或者你可以使用一些ORM工具,如Hibernate、Cayenne、Toplink等。或者你可以自己构建(虽然我不鼓励这样做,但我认为在多个项目上已经成功完成了此操作)。


4
请试用这个框架: Casper Datasets 它是一个通用的、类型安全的内存数据集库。你可以:
- 自动从关系型查询(或任何其他编程源)中获取数据, - 对数据集发出复杂、链接的查询, - 通过在特定列上指定索引来优化给定的数据集。
它易于使用,并且没有任何重要依赖项。它也符合java.sql.ResultSet,因此可以轻松地将其集成到任何现有的针对关系数据库查询的应用程序中。

2

我使用的一种解决方法是JTable。它没有DataTable的强大数据功能,但它允许您获取一些数据并将其绑定到带有一些结构的控件上。

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工具。


2

从标准库中来看,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);
            }

        }

2

不,在标准库(即Java API)中没有这个功能。


1

考虑使用

java.sql.ResultSet

Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("select * from generic_table");
ResultSetMetaData md = rs.getMetaData();

2
但是在这里,我需要使用resultSet.next()来遍历。我不能说,给我第一列的值或者给我(2,2)位置上的值。 - Ajay
.Net DataTable允许您填充多行数据并在“离线”(在打开数据库连接上下文之外)时使用它。 Java RecordSet没有这个功能,你的回答是误导性的,所以-1。 - Tomasz Modelski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接