使用webservices更新mysql数据库
我正在使用mysql数据库和工作台、EclipseIDE和Tomcat服务器。 我正在为web服务使用MVC模型。在HTML格式中,当我提供用户名和密码时,将显示用户的所有详细信息,当我尝试更新该用户的详细信息时,允许我更改网页上的详细信息。但是,当我提交更新的详细信息表单时,它会显示以下异常,并且数据库中的详细信息不会更新 标题1 我不知道问题出在哪里,但当我尝试首先检索数据时,它会出现任何错误。我的数据库中还有一个用户名“Sapan”。更新数据库的方法在这里 标题2 公共类CustomerDAO扩展了BaseDAO{使用webservices更新mysql数据库,mysql,exception,model-view-controller,dao,Mysql,Exception,Model View Controller,Dao,我正在使用mysql数据库和工作台、EclipseIDE和Tomcat服务器。 我正在为web服务使用MVC模型。在HTML格式中,当我提供用户名和密码时,将显示用户的所有详细信息,当我尝试更新该用户的详细信息时,允许我更改网页上的详细信息。但是,当我提交更新的详细信息表单时,它会显示以下异常,并且数据库中的详细信息不会更新 标题1 我不知道问题出在哪里,但当我尝试首先检索数据时,它会出现任何错误。我的数据库中还有一个用户名“Sapan”。更新数据库的方法在这里 标题2 公共类CustomerD
public boolean updateProduct(Login login){
try {
BaseDAO baseDAO = new BaseDAO();
Connection c = baseDAO.getConnection();
String query = "update test.Customer set City=? ,State=? ,PhoneNumber=? ,Email=? ,Address=? ,ZipCode=? where LoginId="+login.getLoginId();
PreparedStatement preparedStatement = c.prepareStatement(query);
preparedStatement.setString(1, login.getCity());
preparedStatement.setString(2, login.getState());
preparedStatement.setString(3, login.getCellnumber());
preparedStatement.setString(4, login.getEmail());
preparedStatement.setString(5, login.getAddress());
preparedStatement.setInt(6, login.getZipcode());
int i = preparedStatement.executeUpdate();
if (i == 1) {
System.out.println("Record updated successfully.");
}
} catch(Exception e) {
e.printStackTrace();
}
return true;
}} 请帮我找出问题出在哪里。
提前感谢。错误消息清楚地说明了
未知列
。并不是说没有匹配的记录。这是而不是一个会抛出完整堆栈回溯的错误。这只是一个空的结果集,是一个完全有效的结果
问题是您正在对自己执行SQL注入攻击。您可以正确地为所有字段使用占位符,实际用户名除外。由于未使用占位符,和未能引用该值,因此创建了SQL语法错误:
... where LoginId="+login.getLoginId();
应该是
... where LoginId='" + login.getLoginId() + "'";
^--missing ^^^^^^--missing in your code
... where LoginID=?
preparedStatement.setInt(7, login.getLoginID());
纠正立即出现的错误。更好的是,我们应该
... where LoginID=?
preparedStatement.setInt(7, login.getLoginID());
由代码生成的查询结果如下所示
... where LoginID=Sapan
如果没有引号,Sapan
将被解释为字段名,该字段名不存在,因此会出现错误