public static void insertData() {
String insertFirstName;
String insertLastName;
int id;
Scanner in = new Scanner(System.in);
System.out.println("insert First Name: ");
insertFirstName = in.nextLine();
System.out.println("insert Last Name: ");
insertLastName = in.nextLine();
System.out.println("First name " + insertFirstName + " Last Name "
+ insertLastName);
try {
Statement statement = null;
Class.forName(JDBC_DRIVER);
Connection con = DriverManager.getConnection(DB_URL, "", "");
System.out.println("Connection Successfull");
statement = con.createStatement();
String sql = "Select id, FirstName, LastName FROM PhoneBook";
ResultSet rs = statement.executeQuery(sql);
rs.moveToInsertRow();
rs.next();
while (rs.next()) {
rs.updateString("FirstName", insertFirstName);
rs.updateString("LastName", insertLastName);
rs.insertRow();
}
statement.close();
rs.close();
} catch (Exception e) {
System.out
.println("********************ERROR*********************");
System.out.println(e.getMessage());
}
}
我保持得到 的 ****************** ERROR ******************* 无效的光标类型:1003
我不明白为什么。我有RS.next(),然后我通过While(rs.next())。我究竟做错了什么?请帮忙谢谢
答案 0 :(得分:0)
javadoc of moveToInsertRow()
说:
插入行是与可更新结果集
关联的特殊行
(强调我的)
默认的ResultSet对象是不可更新,并且只有一个向前移动的光标。因此,您只能迭代一次,并且只能从第一行到最后一行。可以生成可滚动和/或可更新的ResultSet对象。以下代码片段(其中con是有效的Connection对象)说明了如何使结果集可滚动且对其他人的更新不敏感,且可更新。有关其他选项,请参阅ResultSet字段。
答案 1 :(得分:0)
您需要打开一个可更新的ResultSet:
statement = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE
);
有关详细信息,请参阅documentation for ResultSet。
除此之外,看起来rs.next()
后rs.moveToInsertRow();
次呼叫可能会移动太远。文档中的示例显示了您应该如何执行此操作:
rs.moveToInsertRow(); // moves cursor to the insert row
rs.updateString("FirstName", insertFirstName);
rs.updateString("LastName", insertLastName);
rs.insertRow();