我正在使用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
添加新行?
答案 0 :(得分:6)
如果未在表中设置主键,则带有Mysql的JDBC 2.X API在更新模式下不起作用。