web-dev-qa-db-ja.com

Java

Javaに同等のC#DataTableはありますか?

13
Ajay

A 最近尋ねられた同様の質問 。 ResultSetは、データベースへのアクティブな接続でのみ機能し、DataTableは「オフライン」で使用できるため、直接同等ではありません。

個人的な経験から、Java(ただし、javax.sql.rowset.WebRowSetは試していません)には直接同等のものはありません)。プレーンSQLを使用し、Java.sql.ResultSetがまたは、Hibernate、Cayenne、ToplinkなどのORMツールを使用していくつか例を挙げます。または独自に作成します(これをお勧めするわけではありませんが、成功した複数のプロジェクトについて考えています)。

7

このフレームワークを試してみてください。

キャスパーデータセット

汎用でタイプセーフなメモリ内データセットライブラリです。あなたはできる:

  • リレーショナルクエリ(または他のプログラムソース)からデータを自動的にプルします。
  • データセットに対して複雑な連鎖クエリを発行し、
  • 特定の列にインデックスを指定して、特定のデータセットを最適化します。

その使いやすく、重要な依存関係はありません。また、Java.sql.ResultSetに準拠しているため、リレーショナルデータベースに対してクエリを実行する既存のアプリにこれを簡単に統合できます。

4
jli_123

いいえ-標準ライブラリにはありません(つまり、Java API)。

1
oxbow_lakes

の使用を検討してください

Java.sql.ResultSet

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

私が使用した回避策は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ツールを使用することをお勧めします。

1
Menefee

標準ライブラリから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);
            }

        }
0
Sayeed S. Alam