HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet

Diskutiere ResultSet update aktualisiert DB, aber nicht das ResultSet im Datenbankprogrammierung Forum; Hallo, ich nutze eine JTable mit einem TableModel, welches ein AbstractTableModel erweitert. Im Hintergrund läuft eine verschlüsselte HSQLDB im...

  1. ringline
    ringline Neues Mitglied
    Hallo,

    ich nutze eine JTable mit einem TableModel, welches ein AbstractTableModel erweitert. Im Hintergrund läuft eine verschlüsselte HSQLDB im File-Modus.

    Problem: Wenn ich in der setValueAt-Methode das ResultSet mit updateString update, und dann mit updateRow() in die Datenbank schreibe, wird zwar die Datenbank korrekt aktualisiert, aber das ResultSet enthält zu keinem Zeitpunkt sichtbar die Änderungen, was ich mit einem System.out.println nach dem updateString, aber vor und nach dem updateRow() überprüft habe. Dementsprechend ist natürlich auch die Änderung nicht in der JTable sichtbar.

    Hier der Code des TableModels:

    Code (Java):
    package model;

    public class TutorTableModel extends AbstractTableModel {
        public boolean conn = false;
        private final String SQLSelect = "SELECT * FROM TUTOR;";
        private Connection con;
        private Statement stmt;
        private ResultSet rsGUI;
        private ResultSetMetaData rsmd;
        DBProperties config = new DBProperties();
        DefaultTableModel model;

        public TutorTableModel() {
            if (checkConnection()) {
                conn = true;
            }
        }

        public boolean checkConnection() {
            try (Connection conTest = DriverManager.getConnection(config.getUrl(), config.getUserName(),config.getPassWord());
                    Statement stmtTest = conTest.createStatement();    ResultSet rsTest = stmtTest.executeQuery(SQLSelect)) {
                System.out.println("Verbindung zur Datenbank wurde hergestellt.");
                return true;
            } catch (SQLException e) {
                System.out.println("Die Verbindung zur Datenbank konnte nicht hergestellt werden!");
                return false;
            }
        }

        public void init() {
            closeConnections();
            try {
                con = DriverManager.getConnection(config.getUrl(), config.getUserName(), config.getPassWord());
                stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rsGUI = stmt.executeQuery(SQLSelect);
                rsmd = rsGUI.getMetaData();
            } catch (SQLException e) {
                System.out.println("Fehler beim Initialisieren der Tabelle.");
            }
        }

        // Alle Zellen sind editierbar.
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return true;
        }

        @Override
        public int getRowCount() {
            try {
                rsGUI.last();
                return rsGUI.getRow();
            } catch (SQLException e) {
                return 0;
            }
        }

        @Override
        public int getColumnCount() {
            try {
                return rsmd.getColumnCount();
            } catch (SQLException e) {
                return 0;
            }
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            try {
                rsGUI.absolute(rowIndex + 1);
                return rsGUI.getObject(columnIndex + 1);
            } catch (SQLException e) {
                return 0;
            }
        }
       
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            try{
                if (!aValue.equals(null)) {
                    rsGUI.absolute(rowIndex+1);
                    rsGUI.updateString(columnIndex+1, aValue.toString());
                    System.out.println(rsGUI.getString(columnIndex+1));
                    rsGUI.updateRow();
                    System.out.println(rsGUI.getString(columnIndex+1));
                    this.fireTableCellUpdated(rowIndex, columnIndex);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }

        @Override
        public String getColumnName(int columnIndex) {
            try {
                return rsmd.getColumnName(columnIndex + 1);
            } catch (SQLException e) {
                return super.getColumnName(columnIndex);
            }
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            try {
                return Class.forName(rsmd.getColumnClassName(columnIndex + 1));
            } catch (SQLException e) {
                return super.getColumnClass(columnIndex);
            } catch (ClassNotFoundException e) {
                throw new IllegalStateException(e);
            }
        }

        public void closeConnections() {
            if (rsGUI != null) {try {rsGUI.close();} catch (SQLException ex) { }}
            if (stmt != null) {try {stmt.close();} catch (SQLException ex) {}}
            if (con != null) {try {con.close();} catch (SQLException ex) {}}
        }
    }
     
    Bin dankbar für alle Tips und Hilfe!
     
  2. Vielleicht hilft dir dieses Buch hier weiter.
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

ResultSet update aktualisiert DB, aber nicht das ResultSet - Ähnliche Themen

ResultSet.updateBytes schlägt fehl
ResultSet.updateBytes schlägt fehl im Forum Datenbankprogrammierung
ResultSet kann Datenbank nicht update, warum?
ResultSet kann Datenbank nicht update, warum? im Forum Datenbankprogrammierung
Resultset.updateBinaryStream
Resultset.updateBinaryStream im Forum Java Basics - Anfänger-Themen
executeUpdate "innerhalb" eines Resultsets
executeUpdate "innerhalb" eines Resultsets im Forum Datenbankprogrammierung
Tabelle updaten wenn ResultSet aus JDBC-Quelle
Tabelle updaten wenn ResultSet aus JDBC-Quelle im Forum Datenbankprogrammierung
Thema: ResultSet update aktualisiert DB, aber nicht das ResultSet