Equivalente de DataTable en Java

¿Existe un equivalente de C # DataTable en Java?

Una pregunta similar que se ha hecho recientemente . ResultSet ciertamente no es un equivalente directo, ya que solo funciona con una conexión activa a la base de datos, mientras que una DataTable se puede usar “fuera de línea”.

Por experiencia personal, diría que no existe un equivalente directo en Java (sin embargo, no han probado javax.sql.rowset.WebRowSet ). O vas con SQL simple y java.sql.ResultSet es tu amigo. O utiliza alguna herramienta ORM como Hibernate, Cayenne, Toplink para nombrar unos pocos. O construyes el tuyo (no es que lo anime, pero creo que en más de un proyecto se ha hecho con éxito).

Pruebe este marco:

Conjuntos de datos Casper

Es una biblioteca de conjunto de datos en memoria que es genérica y también segura. Usted puede:

  • Extraiga datos automáticamente de consultas relacionales (o de cualquier otra fuente programática),
  • Emitir consultas complejas y encadenadas contra el conjunto de datos
  • Optimice un conjunto de datos determinado especificando índices en columnas particulares.

Es fácil de usar y no tiene dependencias significativas. También es compatible con java.sql.ResultSet, por lo que es posible integrarlo fácilmente en cualquier aplicación existente que consulte una base de datos relacional.

Considera usar un

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

No, no en las bibliotecas estándar (es decir, la API de Java).

Una solución alternativa que he usado es JTable. No tiene las características de datos robustas de una DataTable adecuada, pero le permitirá tomar algunos datos y vincularlos a un control con cierta estructura.

 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]; } } 

Y luego para usarlo simplemente:

 JTable table = new JTable(new TableModel()); 

De nuevo, esto es rápido y simple, y si está tratando con grandes cantidades de datos, le recomendaría usar una herramienta ORM adecuada.

De Standard Library DefaultTableModel es una buena clase.

 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); } }