deleterow() ReadOnly Statement error

Go To StackoverFlow.com

0

i'm doing my first applications using JDBC/Oracle... Today i had a problem and i can't find out what's wrong.

That's my code (some parts)

My global variables:

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;

[...]

My connection method:

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, i have a method to delete a row in a table:

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() returns me an error... it says me that my ResultSet is read only, but in my statement it's delcared as

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

so, what's wrong?

sry for the noobish code and the bad english -.-'''

2012-04-05 15:11
by Cirou


3

select * makes the Resultset instance readonly.
select COLUMNNAME makes it updatable.

2012-04-05 15:28
by elias
It works! Great! Thank you so much!! - Cirou 2012-04-05 17:32
Ads