Эквивалент DataTable в Java

Есть ли эквивалент С# DataTable в Java?

Ответ 1

A аналогичный вопрос, который был задан в последнее время. ResultSet, конечно, не является прямым эквивалентом, поскольку он работает только с активным подключением к базе данных, а DataTable может использоваться "в автономном режиме".

Из личного опыта я бы сказал, что нет прямого эквивалента в Java (хотя и не пробовал javax.sql.rowset.WebRowSet). Вы либо используете простой SQL, а java.sql.ResultSet - ваш друг. Или вы используете какой-то инструмент ORM, такой как Hibernate, Cayenne, Toplink, чтобы назвать несколько. Или вы строите свои собственные (не то, чтобы я поощряю это, но я думаю, что более чем один проект был успешно выполнен).

Ответ 2

Попробуйте эту инфраструктуру:

Casper Datasets

Его встроенная библиотека набора данных, которая является общей и также безопасна. Вы можете:

  • Автоматическое извлечение данных из реляционных запросов (или из любого другого программного источника),
  • Задавать сложные, закодированные запросы к набору данных,
  • Оптимизируйте данный набор данных, указав индексы для определенных столбцов.

Прост в использовании и не имеет существенных зависимостей. Он также совместим с 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);
            }

        }