MySQL-JDBC:insert语句PreparedStatement占位符的问题

caodajiefly 2010-07-13 03:20:47
其中数据库名为userifo,表明为table,表中有三个字段:id(自动增量)、username(字符串)、password(字符串)


String name=request.getParameter("name");
String pass=request.getParameter("pass");



String sql="INSERT INTO userinfo.table(username,password) values (?,?)";

PreparedStatement pstm=conn.prepareStatement(sql);

pstm.setString(1, name);
pstm.setString(2, pass);

pstm.executeUpdate(sql);


运行后报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;





但是如果把sql改为:
String sql="insert into userinfo.table(username,password) values('"+name+"','"+pass+"')";
就可以运行




麻烦各位看一下是什么问题
...全文
1115 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwb2008 2010-12-28
  • 打赏
  • 举报
回复
太有才了,还真没看出来。
caodajiefly 2010-07-14
  • 打赏
  • 举报
回复
不好意思,2了。

把最后的pstm.executeUpdate(sql);
改为pstm.executeUpdate();
就行了
caodajiefly 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 closewbq 的回复:]
哈哈- -!难道人品问题?
[/Quote]
应该不是-_-!!!
caodajiefly 2010-07-13
  • 打赏
  • 举报
回复
jar包啊,我用的是mysql-connector-java-5.1.13.zip,应该不用更新了吧;

谢谢soli11722984和wzmlove007的回复
我看还是用String sql="insert into userinfo.table(username,password) values('"+name+"','"+pass+"')";算了,虽然麻烦,但不会出错
closewbq 2010-07-13
  • 打赏
  • 举报
回复

哈哈- -!难道人品问题?
soli11722984 2010-07-13
  • 打赏
  • 举报
回复
……………………
更新mysql的jar包
caodajiefly 2010-07-13
  • 打赏
  • 举报
回复
先输出pass:asdf
后面就接着:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;
soli11722984 2010-07-13
  • 打赏
  • 举报
回复
后台
if(null == pass){
System.out.println("pass is null");
}else{
System.out.println("pass:"+pass);
}

在String pass=request.getParameter("pass");下面加上,输出什么
caodajiefly 2010-07-13
  • 打赏
  • 举报
回复
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(name+"<br>");
out.println(pass+"<br>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();


name和pass都是有值得,不是null。

麻烦大家在帮我看看
soli11722984 2010-07-13
  • 打赏
  • 举报
回复
建议去看看name和pass是不是为null,估计是pass为null了
caodajiefly 2010-07-13
  • 打赏
  • 举报
回复
在另一处使用:
String name=request.getParameter("name");
String password=request.getParameter("pass");
String sql="select password from `userinfo`.`table` where username=?";
PreparedStatement pstm=conn.prepareStatement(sql);
pstm.setString(1, name);
ResultSet rs= pstm.executeQuery();

同样是使用了占位符,但这里能正常运行。
caodajiefly 2010-07-13
  • 打赏
  • 举报
回复
恩,是主键。
我想你的意思是写成:
String sql="INSERT INTO userinfo.table VALUES (null,?,?)";
吧,不过还是提示相同的错误
wzmlove007 2010-07-13
  • 打赏
  • 举报
回复
你的id是主键吧
String sql="INSERT INTO userinfo.table(username,password) values (?,?)";
你这里面要把id设为null
String sql="INSERT INTO userinfo.table(username,password) values (null,?,?)";

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧