2012-04-05 11 views
0

Ich mache meine ersten Anwendungen mit JDBC/Oracle ... Heute hatte ich ein Problem und ich kann nicht herausfinden, was los ist.deleterow() ReadOnly Statement Fehler

, dass mein Code (einige Teile) ist

Meine globalen Variablen:

public class Esercizio02_GestioneDB { 

public Esercizio02_GestioneDB(){ 

} 

public Connection conn = null; 
public Statement s = null; 
public ResultSet rs = null; 
public ResultSet rs1 = null; 
ResultSetMetaData rsmd = null; 
ResultSetMetaData rsmd1 = null; 

[...] 

Meine Verbindungsmethode:

public void connetti(String user, String pwd) throws ClassNotFoundException, SQLException { 

     //DRIVER 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 

     //URL 
     String url = "jdbc:oracle:thin:@//localhost:1521/xe"; 

     //CONNECTION 
     conn = DriverManager.getConnection(url, user, pwd); 

     //AUTOCOMMIT 
     conn.setAutoCommit(true); 

     //STATEMENT 
     s = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);   


} 

So habe ich eine Methode zum Löschen eine Zeile in einer Tabelle:

private void eliminaPrenotazione() { 

    try { 

     String message1 = "Scegli la prenotazione da cancellare:\n\n"; 

     String query = "SELECT * FROM camere_prenotate"; 

     rs1 = s.executeQuery(query); 
     rsmd1 = rs1.getMetaData(); 

     message1 += "INDICE "; 
     for (int i=1; i<=rsmd1.getColumnCount(); i++) { 
      message1 += rsmd1.getColumnName(i); 
      message1 += " \t "; 
     } 
     message1 += "\n_______________________________\n"; 

     int rowIndex = 1; 
     String columnType = ""; 
     while (rs1.next()) {  
      message1 += "["+rowIndex+"]. "; 
      rowIndex++; 

      for (int i=1; i<=rsmd1.getColumnCount(); i++) { 

       columnType = rsmd1.getColumnTypeName(i); 

       if(columnType.substring(0, 3).equalsIgnoreCase("num")) message1 += rs1.getInt(i); 
       if(columnType.substring(0, 3).equalsIgnoreCase("var") || columnType.substring(0, 3).equalsIgnoreCase("dat")) 
         message1 += rs1.getString(i); 

       message1 += " \t "; 
      } 
      message1 +="\n"; 
     } 
     message1 +="\n"; 

     String scelta = JOptionPane.showInputDialog(null, message1); 
     int sceltaInt = Integer.parseInt(scelta); 

     rs1.absolute(sceltaInt); 
     rs1.deleteRow(); 



    } catch (Exception e) { 

     JOptionPane.showMessageDialog(null, "Errore: " + e.getMessage()); 
    } 

} 

deleteRow() gibt mir einen Fehler ... es sagt mir, dass mein ResultSet nur gelesen wird, aber in meiner Aussage ist es als

s = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 

so delcared, was ist los?

sry für den noobish Code und das schlechte Englisch -.- ''‘

Antwort

3

select * die Nur-Lese-Resultset Instanz macht.
select COLUMNNAME macht es aktualisierbar.

+0

Es funktioniert! Groß! Ich danke dir sehr!!! – Cirou