2009-08-27 94 views

回答

6

A similar question that has been asked recently。 ResultSet当然不是一个直接的等价物,因为它只能与数据库的活动连接一起工作,而DataTable可以“脱机”使用。

从个人经验来说,我认为在Java中没有直接的等价物(虽然没有尝试javax.sql.rowset.WebRowSet)。你要么用普通的SQL去和java.sql.ResultSet是你的朋友。或者你使用一些像Hibernate,Cayenne,Toplink这样的ORM工具来举几个例子。或者你建立自己的(不是我鼓励这个,但我认为已经成功完成了多个项目)。

2

考虑使用

java.sql.ResultSet 

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

但在这里,我需要遍历,使用resultSet.next()。我不能说,给我第1栏的价值或给我(2,2) – Ajay 2009-08-27 13:22:37

1

否 - 不是在标准库(即的Java API)。

1

我使用的解决方法是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工具。

3

给这个框架一个尝试:

Casper Datasets

它是一个在内存中的数据集库是通用的,也是类型安全的。可以:自动从关系查询

  • 拉数据(或从任何其他编程源),
  • 问题复杂,链查询对数据集,
  • 通过指定特定列的索引优化给定的数据集。

它易于使用且没有任何重要的依赖关系。它也符合java.sql.ResultSet,所以它可以很容易地集成到任何现有的应用程序,查询关系数据库

0

从标准库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); 
      } 

     }