Base de datos para GlazedList / JTable y luego editar la base de datos a través de la GlazedList / JTable

StackOverflow https://stackoverflow.com/questions/2139919

Pregunta

Soy capaz de romper este problema en dos preguntas:

  1. ¿Cuál es la mejor manera de poner el contenido de una base de datos (MS-Access) en un GlazedList / JTable
  2. ¿Cómo asegurarse de que cualquier cambio realizado en el GlazedList / JTable se reflejan en la base de datos (MS-Access)?

Estas son las cosas que sé:

  1. Yo sé cómo recuperar / manipular el información de una base de datos utilizando el método JDBC .
  2. GlazedList 's     requieren una reflexión por lo que necesitaría     para hacer una clase que contiene todas las     columna / campo en la base de datos. Esta     no es muy ampliable ...

¿Cuál es la mejor manera de ir sobre este problema?

editar: // He conseguido crear un generador de clase. Toma los títulos de las columnas y crea un campo de instancia. Esto debería resolver el # 2 http://pastebin.ca/1770996 - Se crea la clase, pero no creo que la reflexión se usa correctamente. .. Edit2: // Editado mi código de arriba por lo que funciona ... http: // Pastebin. ca / 1776722

¿Fue útil?

Solución

Yo tenía un problema muy similar, y creo que mi resultado fue similar también, excepto que no tenía necesidad de reflexión (esquema de base de datos estática). Es necesario crear objetos de fila para cada fila (que sólo puede incluir el número de fila y las referencias a un conjunto de resultados y la información de la columna).

A continuación, escribir una implementación ca.odell.glazedlists.gui.WritableTableFormat para mapear estos objetos a celdas de la tabla.

Para evitar problemas con # 2, puede crear una clase fila flexible que obtiene información de la columna una vez desde el conjunto de resultados y lo almacena en caché para su reutilización.

Edit: He encontrado una aplicación original y más simple (bastante simple) que la mina se basaba en. También se puede ver aquí: conjunto de resultados Tabla . Podría ser suficiente para sus propósitos. Luego se agrega esto a la aplicación AbstractTableModel proporcionada por el enlace.

public void setValueAt(Object ob, int row, int column) throws SQLException {
    resultSet.absolute(r+1);
    if (ob == null) {
        resultSet.updateNull(column+2);
    } else {
        resultSet.updateObject(column+2,ob);
    }
    rs.updateRow();
    this.fireTableCellUpdated(row,column);  
}
public boolean isCellEditable(int row, int col) {
    return true;
}

Hay tres capturas aunque: el conjunto de resultados deberá poder ser actualizada, apoyo desplazándose ambas direcciones, y ser sensible a cambios a la base de datos. Estos son parte de la especificación JDBC, pero no todos los conductores de los apoyan, y que necesita para asegurarse de que se crea el conjunto de resultados con ellos habilitados. En ese caso, usted acaba de hacer this.fireTableDataChanged() periódicamente para forzar una actualización completa de los datos de tabla. No es el método más rápido, pero funciona.


Edit2: Otro enfoque

¿Qué pasa con el uso de una de las bibliotecas asignador-relacional de objetos, y luego hacer lo ca.odell.glazedlists.gui.WritableTableFormat como he sugerido más arriba?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top