一尘不染

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

mysql

我正在使用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 KEYResultSet成功添加行的表,现在,我只想知道为什么MySQL不接受请求,从添加新行ResultSet如果id列没有出现在该表?


阅读 294

收藏
2020-05-17

共1个答案

一尘不染

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

2020-05-17