我只需要再看一眼,因为我看不到错误。插入不起作用,我不明白为什么。这是一个家庭作业。适用的代码在 CustomerDAO 类中。这适用于使用 Stripes 框架使用 Java 构建的 webapp。这是有问题的代码:
public void create(Customer customer) {
String sql = "insert into customer (`firstname`, `lastname`, `email`, " +
"`username`, `password`) values (?, ?, ?, ?, ?)";
try {
PreparedStatement sth = this.dbh.getCon().prepareStatement(sql);
sth.setString(1, customer.getFirstName());
sth.setString(2, customer.getLastName());
sth.setString(3, customer.getEmailAddress());
sth.setString(4, customer.getUserName());
sth.setString(5, customer.getPassword());
sth.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();;
} catch (NullPointerException ex) {
ex.printStackTrace();
} finally {
this.dbh.closeConnection();
}
}
正如我所说,这种方法存在于我的 DAO 中。从注册表单的操作 bean 调用此方法。以下是我测试过的内容:
客户对象不为空。客户字段从表单中获取它们的值并且它们是正确的。DAO 不为空。数据库已连接。
我通过测试 Action Bean 中的条件来检查上述项目,如果条件为真则返回 null,否则返回 RedirectResolution。
我确实注释掉了将变量绑定到 SQL 的五行,并用我想要插入的实际数据替换了 SQL 中的变量,并且记录确实插入了。这就是为什么我认为问题出在以下五行:
sth.setString(1, customer.getFirstName());
sth.setString(2, customer.getLastName());
sth.setString(3, customer.getEmailAddress());
sth.setString(4, customer.getUserName());
sth.setString(5, customer.getPassword());
当我在操作 bean 中使用这个 if 语句时,我被重定向到一个完全空的页面,这就是我知道这些值绑定到模型字段的方式。
if (this.customer.getFirstName().equals("Tony")) {
return null;
}
下面是动作 bean 的提交方法:
public Resolution submit() {
this.customer = this.getCustomer();
this.customerDao = this.getCustomerDao();
this.customerDao.create(customer);
return new RedirectResolution(RegisterFormActionBean.class);
}
字段值的测试插入在this.customer = this.getCustomer();
. 我在所有表单字段上独立运行该测试,它总是转发到一个空白页面。当它运行时,我被重定向回注册页面,但没有插入记录。我检查了文档以确保该setString()
方法是正确的并且看起来是正确的。
我知道这可能是我忽略的一些愚蠢的事情,但我只是在这里旋转我的轮子。
实际问题:为什么当我将值硬编码到 SQL 中时插入工作但当我将值绑定到语句时它不起作用。