Есть ли эквивалент С# DataTable в Java?
Эквивалент DataTable в Java
Ответ 1
A аналогичный вопрос, который был задан в последнее время. ResultSet, конечно, не является прямым эквивалентом, поскольку он работает только с активным подключением к базе данных, а DataTable может использоваться "в автономном режиме".
Из личного опыта я бы сказал, что нет прямого эквивалента в Java (хотя и не пробовал javax.sql.rowset.WebRowSet
). Вы либо используете простой SQL, а java.sql.ResultSet
- ваш друг. Или вы используете какой-то инструмент ORM, такой как Hibernate, Cayenne, Toplink, чтобы назвать несколько. Или вы строите свои собственные (не то, чтобы я поощряю это, но я думаю, что более чем один проект был успешно выполнен).
Ответ 2
Попробуйте эту инфраструктуру:
Его встроенная библиотека набора данных, которая является общей и также безопасна. Вы можете:
- Автоматическое извлечение данных из реляционных запросов (или из любого другого программного источника),
- Задавать сложные, закодированные запросы к набору данных,
- Оптимизируйте данный набор данных, указав индексы для определенных столбцов.
Прост в использовании и не имеет существенных зависимостей. Он также совместим с java.sql.ResultSet, поэтому его можно легко интегрировать в любые существующие приложения, которые запрашивают реляционную базу данных
Ответ 3
Рассмотрим использование
java.sql.ResultSet
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("select * from generic_table");
ResultSetMetaData md = rs.getMetaData();
Ответ 4
Нет - не в стандартных библиотеках (т.е. Java API).
Ответ 5
Обходной путь, который я использовал, - 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.
Ответ 6
Из стандартной библиотеки 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);
}
}