2017-03-07 2 views
2

Ich versuche, meine JTable aus meiner eingebetteten Datenbank zu befüllen, die ich in Netbeans eingerichtet habe.Die Methode 'getRow()' ist nur für Scrollcursor zulässig SQLException error

Meine Datenbank enthält 3 Zeilen und 3 Spalten, die ich in eine JTable einfügen möchte, und mache die Tabelle in meiner GUI-Anwendung sichtbar.

Allerdings erhalte ich einen java.sql.SQLException Fehler wie der Titel oben sagt und meine Tabelle wird nicht sichtbar in meiner GUI-Anwendung.

Hier ist mein Code:

public void FillTable(JTable table, String Query) 
{ 
    try 
    { 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 
     Connection conn = DriverManager.getConnection("jdbc:derby:STOCK_CONTROL"); 
     Statement stat = conn.createStatement(); 
     ResultSet rs = stat.executeQuery(Query); 

     //Remove previously added rows 
     while (table.getRowCount() > 0) 
     { 
      ((DefaultTableModel) table.getModel()).removeRow(0); 
     } 

     int columns = rs.getMetaData().getColumnCount(); 

     while (rs.next()) 
     { 
      Object[] row = new Object[columns]; 

      for (int i = 1; i <= columns; i++) 
      { 
       row[i - 1] = rs.getObject(i); 
      } 
      //The error is being generated here at 'rs.getRow()' 
      ((DefaultTableModel) table.getModel()).insertRow(rs.getRow() - 1, row); 
     } 

     rs.close(); 
     stat.close(); 
     conn.close();   
    } 
    catch (InstantiationException | 
      IllegalAccessException | 
      ClassNotFoundException | 
      SQLException e) 
    { 
     System.out.println(e); 
     e.printStackTrace(); 
    } 
} 

ich dann meine Tabelle erstellen und rufen Sie die Methode, wie oben:

JTable tigerTable = new JTable(); 

FillTable(tigerTable, "SELECT * FROM TIGER_INFO"); 

Ich habe versucht, Informationen zu finden, warum dieser Fehler verursacht wird aber ohne Erfolg.

Meine Frage ist, wie beziehe ich meine JTable korrekt aus meiner eingebetteten Datenbank, während ich mich auch von diesem unbekannten Fehler entferne, den ich erreicht habe?

Was bedeutet dieser Fehler genau? Ich bin mir nicht sicher, was ein "Scroll-Cursor" ist.

Antwort

4

Wie in ResultSet.getRow() dokumentiert:

Hinweis: Unterstützung für die getRow Methode ist optional für ResultSet s mit einer Ergebnismenge Typ TYPE_FORWARD_ONLY
[..]

Würfe:
[..]
SQLFeatureNotSupportedException - wenn der JDBC-Treiber diese Methode nicht unterstützt

Sie müssen entweder einen scrollbaren Cursor stellen

conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 

mit Or - wahrscheinlich besser - verfolgen die Zeilennummer selbst statt mit ResultSet.getRow(). Zum Beispiel:

int rowIdx = 0; 
while (rs.next()) { 
    Object[] row = new Object[columns]; 
    // ... 

    ((DefaultTableModel) table.getModel()).insertRow(rowIdx++, row); 
} 

Es ist eine Weile her, dass ich irgendetwas mit Schwung getan habe, aber es könnte noch einfacher sein, nur vorhandene Zeilen aus der Tabelle Modell zu entfernen und addRow nennen.

Verwandte Themen