Java jdbcsql中的resultset

Java jdbcsql中的resultset,java,jdbc,resultset,Java,Jdbc,Resultset,我有一个guijdbcsql项目。我可以很好地读取数据库中的信息,但我不知道我的create、update、delete方法有什么问题。似乎resultSet中的某些方法无法正常工作。我的代码如下 public Person create(Person p){ try { rs.moveToInsertRow(); rs.updateInt("PersonID", p.getPersonID()); rs.u

我有一个guijdbcsql项目。我可以很好地读取数据库中的信息,但我不知道我的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。这是我在尝试创建一个新人时的错误

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) {
    ....
}

对于插入、更新和删除,有许多这种方法的示例

你没有描述出哪里出了问题,这还不清楚。你能再发一点代码吗?就像ResultSet和Connection instantiation.sr一样,我的第一个问题是,
ResultSet.CONCUR\u READ\u
生成的结果集是不可更新的。