-1
           public void UpdateCustomer(Customer customer) throws CustomerHomeException, ClassNotFoundException{

    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String url = "jdbc:odbc:Mydb";
        String user = "user1";
        String password = "password";
        Connection con = DriverManager.getConnection(url,user,password);
        PreparedStatement smt= con.prepareStatement("update customer SET ssn = ? customer_name = ? where ssn = ?");
        if(getCustomer.equals(customer.getSocialSecurityNumber()))
        smt.setString(1,customer.getSocialSecurityNumber());
        smt.setString(2, customer.getName());
        smt.setString(3, customer.);
        smt.executeUpdate();
        smt.close();
        con.close();
}
    catch (SQLException e){
        throw new CustomerHomeException("Failed to create CustomerHome", e);
    }
}

但我很困惑如何检索现有 ssn 的值。我也有一个方法 getCustomers 来分别检索特定的客户。会有帮助吗

4

1 回答 1

1

我建议您重新审视您的数据库模型。您使用 SSN 作为主键(基于您的 WHERE 子句),但随后您尝试更新它。更新主键是非常糟糕的做法(参考:https ://stackoverflow.com/a/3838649/2065845 )。如果您引入一些其他键值(可能是自动递增的 ID?),那么您将能够修改更新语句的 WHERE 子句以使用该 ID,并且您不再拥有旧 SSN 的事实变得不重要。

除此之外,您要么需要修改方法签名以包含旧 SSN,要么需要执行具有其他值的 SELECT 以获取旧 SSN(不过,如果你能做到这一点,我想知道为什么不只在 UPDATE 语句的 WHERE 子句中使用它)。

于 2013-05-15T20:14:29.780 回答