[英]resultset in JDBC SQL
我有一個GUI JDBC SQL項目。 我可以很好地從數據庫中讀取信息,但是我不知道我的create,update,delete方法有什么問題。 似乎resultSet中的某些方法無法正常工作。 我的代碼如下。
public Person create(Person p){
try {
rs.moveToInsertRow();
rs.updateInt("PersonID", p.getPersonID());
rs.updateString("firstName", p.getFirstName());
rs.updateString("middleName", p.getMiddleName());
rs.updateString("lastName", p.getLastName());
rs.updateString("email", p.getEmail());
rs.updateString("phone",p.getPhone());
rs.insertRow();
rs.moveToCurrentRow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}// end of create method
public Person update(Person p){
try {
rs.updateString("firstName", p.getFirstName());
rs.updateString("middleName", p.getMiddleName());
rs.updateString("lastName", p.getLastName());
rs.updateString("email", p.getEmail());
rs.updateString("phone",p.getPhone());
rs.updateRow();
rs.moveToCurrentRow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}//end of update method
public void delete(){
try {
rs.moveToCurrentRow();
rs.deleteRow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//end of delete method
感謝您的閱讀。
public PersonBean() {
try {
Class.forName(JDBC_DRIVER);
Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
sm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = sm.executeQuery("Select * From Person");
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//end of PersonBean
我與SQL的連接正常,因為我可以從SQL讀取信息,但無法將數據寫入SQL。 當我嘗試創建一個新的Person時,這是我的錯誤。
com.microsoft.sqlserver.jdbc.SQLServerException: The result set is not updatable.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.throwNotUpdatable(SQLServerResultSet.java:436)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetIsUpdatable(SQLServerResultSet.java:447)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.moveToInsertRow(SQLServerResultSet.java:4350)
at PersonBean.create(PersonBean.java:29)
默認的ResultSet對象是不可更新的,並且具有僅向前移動的光標。 因此,您只能從第一行到最后一行迭代一次。 可以產生可滾動和/或可更新的ResultSet對象。 可更新的結果集允許通過結果集修改表中的數據。 以下代碼使結果集可滾動並且對其他人的更新不敏感:
try {
// Create a statement that will return updatable result sets
Statement stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//Primary key EmployeeID must be specified
//so that the result set is updatable
ResultSet resultSet = stmt.executeQuery(
"SELECT EmployeeID, Name, Office FROM employees");
} catch (SQLException e) {
}
您要使用以下示例,並將此代碼與項目中的代碼一起檢查:
//database connector file example (com.mysql.jdbc.Driver)
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String DB_URL = "jdbc:mysql://localhost:3306/dbname";
String DB_USER = root;
String DB_PASS = "";
Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
Statement stmt = con.createStatement();
stmt.executeQuery("Select * From Person");
ResultSet resultSet = stmt.getResultSet();
while(resultSet .next()){
System.out.print(resultSet.getString("fieldName");
//and other your field to display
}
resultSet.close();
stmt.close()
} catch(Exceptoin e) {
....
}
有許多用於插入,更新和刪除此方法的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.