Java SQL占位符将不绑定

Java SQL占位符将不绑定,java,web-applications,stripes,Java,Web Applications,Stripes,我只需要再看一眼,因为我的眼睛看不到错误。插入不起作用,我看不出原因。这是家庭作业。适用的代码位于CustomerDAO类中。这适用于使用Stripes框架用Java构建的webapp。以下是违规代码: public void create(Customer customer) { String sql = "insert into customer (`firstname`, `lastname`, `email`, " + "`username`, `pass

我只需要再看一眼,因为我的眼睛看不到错误。插入不起作用,我看不出原因。这是家庭作业。适用的代码位于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调用的。以下是我测试过的东西:

客户对象不为空。customer字段从表单中获取其值,并且它们是正确的。道不是空的。数据库已连接

我通过测试Actionbean中的条件来检查上面的项目,如果条件为true,则返回null,否则返回重定向解析

我确实注释掉了将变量绑定到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());
当我在ActionBean中使用这个if语句时,我被重定向到一个完全空的页面,这是我如何知道值绑定到模型的字段的

if (this.customer.getFirstName().equals("Tony")) {
    return null;
}
下面是ActionBean的submit方法:

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中时,insert为什么起作用,而当我将值绑定到语句时,insert不起作用。

也许您的事务没有被自动提交。验证dbh对象如何创建连接,并查看它们是否正在禁用自动提交。尝试使用以下命令启用自动提交:

Connection myConnection = this.dbh.getCon();
myConnection.setAutoCommit(true);
myConnection.prepareStatement(sql);

有关更多信息,请参阅。

我找到了答案。根据直觉,我将数据库表更改为除id字段外接受NULL。当我再次运行它时,插入了记录,我看到
'password'
字段为空。我在register.jsp页面上有两个密码输入,都名为
'password'
。显然,Stripes不知道如果你在同一个表单上有重复的名字该怎么办,我想其中一个会覆盖另一个。我将其中一个文本框重命名为
,并将数据库表改回不允许
NULL
,并插入记录。

表名周围不需要这些反勾号。它们是否导致了
SQLException
?您已经描述了一个问题,但到目前为止还没有提出任何问题(更不用说具体的、可回答的问题了)。你的问题是什么?错误/异常是什么?它们不会导致异常,但我会删除它们。最初我将它们删除,然后将查询复制到Heidi SQL时将它们放在那里,发现
password
可能会导致问题。数据库是MySQL。实际的问题是为什么这个插入不起作用。我只是尝试了一下,但没有任何帮助。当我将参数硬编码到create方法内的sql语句中时,会插入记录。只是当我尝试绑定这些值时就不是了。