简体   繁体   English

使用JDBC和MySQL添加行有问题吗?

[英]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. 我正在使用JDBC与MySQL同步,以向MySQL数据库的表添加和定义行。 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. 问题是,当我使用ResultSet类中的方法向表中添加行时,我不知道为什么它会引发Exception Bear in mind that I've earlier tried just reading the table via ResultSet methods, and, it successfully printed out the cell values. 请记住,我之前尝试过通过ResultSet方法读取表,并且它成功打印出了单元格值。 The following is the concerned code fragement: 以下是有关的代码断裂:

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();}

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

[UPDATE] [更新]

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? 在将表中的id列作为INTEGER AUTO_INCREMENT PRIMARY KEY添加之后, ResultSet成功地将行添加到了表中,现在,我只想知道为什么如果id列不是,则MySQL不接受从ResultSet添加新行的请求在桌子上?

如果您未在表中设置主键,则带有Mysql的JDBC 2.X API在更新模式下将不起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM