簡體   English   中英

JDBC SQL中的結果集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM