Problem with adding rows with JDBC and MySQL?

I’m using JDBC in sync with MySQL to add and define rows to a MySQL database’s Table. The problem is that I don’t know why it is throwing an Exception when I use methods from the ResultSet class to add rows to the table. Bear in mind that I’ve earlier tried just reading the table via ResultSet methods, and, it successfully printed out the cell values. The following is the concerned code fragement:

public void  run(){
    try {
        Connection con = DriverManager.getConnection(                   

        ResultSet set = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE).executeQuery("SELECT * FROM book_info");

        set.updateString(1, "Osama's POV"); set.updateString(2, "Osama B Laden"); 
        set.updateInt(3, 2800); set.updateString(4, "Osama bin Laden's debute book on terrorism");
        set.insertRow(); set.moveToCurrentRow();set.beforeFirst();
        //I'm guessing the bottom while loop is not executed because the above is generating the Exception
        while ({
            System.out.println(set.getString("Book_Title")+ set.getString("Book_Author")+ set.getString("MRP")+set.getString("Comments"));

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
    } catch (Exception e){System.out.println("prob with code");

And this is the Console:

prob with code
com.mysql.jdbc.NotUpdatable: Result Set not updatable (referenced table has no primary     keys).This result set must come from a statement that was created with a result set type of     ResultSet.CONCUR_UPDATABLE, the query must select only one table, can not use functions and must select all primary keys from that table. See the JDBC 2.1 API Specification, section 5.6 for more details.
at com.mysql.jdbc.UpdatableResultSet.moveToInsertRow(
at testJDBCDriver.main(

After adding the id column in the table as INTEGER AUTO_INCREMENT PRIMARY KEY the ResultSet successfully added the row to the table, now, I just want to know why MySQL doesn’t accept request to add new row from ResultSet if the id column isn’t present in the table?


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

The JDBC 2.X API with Mysql doesn’t work in update mode if you don’t set primary key in the table.

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x