Проблема с добавлением строк с JDBC и MySQL? - PullRequest
1 голос
/ 15 декабря 2009

Я использую JDBC синхронно с MySQL для добавления и определения строк в Таблице базы данных MySQL. Проблема в том, что я не знаю, почему он выбрасывает Exception, когда я использую методы из класса ResultSet для добавления строк в таблицу. Имейте в виду, что ранее я пытался просто прочитать таблицу с помощью ResultSet методов, и она успешно распечатала значения ячеек. Ниже приведено описание заинтересованного кода:

public void  run(){
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(                   
                "jdbc:mysql://localhost:3306/temp_book_database","root","1234");            

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


        set.moveToInsertRow();
        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 (set.next()){
            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
        e.printStackTrace();
    } catch (Exception e){System.out.println("prob with code");
    e.printStackTrace();}

А это Консоль:

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(UpdatableResultSet.java:1013)
at testJDBCDriver.run(testJDBCDriver.java:21)
at testJDBCDriver.main(testJDBCDriver.java:9)

[ОБНОВЛЕНИЕ]

После добавления столбца id в таблице как INTEGER AUTO_INCREMENT PRIMARY KEY ResultSet успешно добавил строку в таблицу, теперь я просто хочу знать, почему MySQL не принимает запрос на добавление новой строки из ResultSet если столбца id нет в таблице?

1 Ответ

6 голосов
/ 15 декабря 2009

JDBC 2.X API с Mysql не работает в режиме обновления, если вы не задаете первичный ключ в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...