jsp连接数据库,经过页面穿过来的值来确定修改哪个属性的值,但却报错,求解,本人新手
jsp连接数据库,通过页面穿过来的值来确定修改哪个属性的值,但却报错,求解,本人新手
public String upda(String a,String b,String c)
{
try{
Class.forName(driver);
Connection con=DriverManager.getConnection(url,"root","123456");
String sql="update customers set ?=? where customerID=?";
PreparedStatement p =con.prepareStatement(sql);
p.setString(1,b);
p.setString(2,c);
p.setString(3,a);
p.executeUpdate();
con.close();
return "success111";
}
catch(Exception e)
{
return e.getMessage();
}
}
报错如下
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name'='b' where customerID='a'' at line 1
------解决思路----------------------
String sql="update customers set ?=? where customerID=?
set ?=?, 因为第一个占位符是sql,在预编译时不能通过。
你可以把set中的第一个占位符写入方式改成Statement的方式而不是用PreparedStatement
两个之间的差别自己可以百度下。。
------解决思路----------------------
你把set ?=?第一个问号改成字段名,参数化传值不允许这样的,它只允许传入第二号问号所在位置的值
------解决思路----------------------
不要用?=?,用字符串拼接,例如"update customers set "+b+"=? where customerID=?",在看看你的ID类型是否是字符型的。
------解决思路----------------------
直接字符串拼接把字段名加进去 用preparedstatement传入的值是有类型的 你传入string类型 字段名就变成了 '字段名' 带有引号了 无法识别
public String upda(String a,String b,String c)
{
try{
Class.forName(driver);
Connection con=DriverManager.getConnection(url,"root","123456");
String sql="update customers set ?=? where customerID=?";
PreparedStatement p =con.prepareStatement(sql);
p.setString(1,b);
p.setString(2,c);
p.setString(3,a);
p.executeUpdate();
con.close();
return "success111";
}
catch(Exception e)
{
return e.getMessage();
}
}
报错如下
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name'='b' where customerID='a'' at line 1
------解决思路----------------------
String sql="update customers set ?=? where customerID=?
set ?=?, 因为第一个占位符是sql,在预编译时不能通过。
你可以把set中的第一个占位符写入方式改成Statement的方式而不是用PreparedStatement
两个之间的差别自己可以百度下。。
------解决思路----------------------
你把set ?=?第一个问号改成字段名,参数化传值不允许这样的,它只允许传入第二号问号所在位置的值
------解决思路----------------------
不要用?=?,用字符串拼接,例如"update customers set "+b+"=? where customerID=?",在看看你的ID类型是否是字符型的。
------解决思路----------------------
直接字符串拼接把字段名加进去 用preparedstatement传入的值是有类型的 你传入string类型 字段名就变成了 '字段名' 带有引号了 无法识别