Java中是否有与C# DataTable相当的东西?
这是一个最近提出的类似问题(已经被问过)。ResultSet并不是直接等价的,因为它只能在与数据库的活动连接中使用,而DataTable可以“离线”使用。
根据个人经验,我认为在Java中没有直接的等价物(虽然没有尝试过javax.sql.rowset.WebRowSet
)。你可以选择使用普通的SQL,java.sql.ResultSet
是你的好朋友。或者你可以使用一些ORM工具,如Hibernate、Cayenne、Toplink等。或者你可以自己构建(虽然我不鼓励这样做,但我认为在多个项目上已经成功完成了此操作)。
我使用的一种解决方法是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工具。
从标准库中来看,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);
}
}
不,在标准库(即Java API)中没有这个功能。
考虑使用
java.sql.ResultSet
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("select * from generic_table");
ResultSetMetaData md = rs.getMetaData();