Java SQL占位符将不绑定
我只需要再看一眼,因为我的眼睛看不到错误。插入不起作用,我看不出原因。这是家庭作业。适用的代码位于CustomerDAO类中。这适用于使用Stripes框架用Java构建的webapp。以下是违规代码: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
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语句中时,会插入记录。只是当我尝试绑定这些值时就不是了。