mysql语句这样写提示语法错误,不能更新

如此强大的力量 2011-07-23 09:53:20
代码如下
String selsql = "select * from login where username = ? and password = ?";
Connection con = DBTool.getConnection();
PreparedStatement selstm = con.prepareStatement(selsql);
String username = ActionContext.getContext().getSession()
.get("username").toString();
System.out.println(username);
selstm.setString(1, username);
selstm.setString(2, this.getOldpwd());
ResultSet selrs = selstm.executeQuery();
if (selrs.next()) {
System.out.println("存在此用户");
String updatesql = "update login set password = '?' where username = '?'";
PreparedStatement updatestm = con.prepareStatement(updatesql);
updatestm.setString(1, this.getNewpwd2());
updatestm.setString(2, username);
System.out.println(updatesql);
int num = updatestm.executeUpdate(updatesql);
System.out.println(num);
if (num == 1) {
System.out.println("修改成功");
return SUCCESS;
} else {
System.out.println("修改失败");
return ERROR;
}
} else {
System.out.println("原始密码错误");
return ERROR;
}

提示我语法错误
...全文
858 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForLife5518 2011-07-26
  • 打赏
  • 举报
回复
selstm.setString(1, username);
selstm.setString(2, this.getOldpwd());
问题是不是出在这里啊?占位符不是从0开始吗?如果我说的不对的话,各位不要扔板砖...
familyX 2011-07-26
  • 打赏
  • 举报
回复

String selsql = "select * from login where username = ? and password = ?";

改成

String selsql = "select * from login where username=? and password=?";

就是去掉?和=前面的空格。试试看。
qingmingcom 2011-07-25
  • 打赏
  • 举报
回复
好像没人命中关键呀。
preparestatement是statement的子类。既然你做prepare,那你调用的时候就execute()或executeQuery(),别传参数。不然带参数的又变成statement的执行了。
必须的。
=PNZ=BeijingL 2011-07-23
  • 打赏
  • 举报
回复
String updatesql = "update login set password = ? where username =?";
站位符不需要引起来吧
czx001_2009 2011-07-23
  • 打赏
  • 举报
回复
String selsql = "select * from login where username = ? and password = ?";
Connection con = DBTool.getConnection();
PreparedStatement selstm = con.prepareStatement(selsql);
String username = ActionContext.getContext().getSession()
.get("username").toString();
System.out.println(username);
selstm.setString(1, username);
selstm.setString(2, this.getOldpwd());
ResultSet selrs = selstm.executeQuery();
if (selrs.next()) {
System.out.println("存在此用户");
String updatesql = "update login set password = '?' where username = '?'";
PreparedStatement updatestm = con.prepareStatement(updatesql);
updatestm.setString(1, this.getNewpwd2());
updatestm.setString(2, username);
System.out.println(updatesql);
int num = updatestm.executeUpdate(updatesql);
------------------经尝试,把这里改成int num = updatestm.executeUpdate();
就可以了,楼主可以试试看
_jerrytiger 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 liukelin 的回复:]
大胡子你很细心呀,别忘了加我好友,我需要你这样的人。
[/Quote]

还需要你这样的人。。。大胡子可以直接无视这些话。。。

对大胡子敬佩之情 ,有如滔滔江水,连绵不绝啊啊啊。。。
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
再调试一下吧。。问题可能发生在:你给?设置值的时候

我没你这环境,所以还需要靠你自己,一步步来排查
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zl3450341 的回复:]

引用 20 楼 renxinshe 的回复:

引用 18 楼 zl3450341 的回复:

你不会忘记还有一个在这里等你的答复列。

不会忘记的,直接把值拼装在一起了,之前还不知道什么问题,之后再看看吧。
谢谢了啊


问题是现在报错了?还是OK了? 报错了把错误贴出来一下
[/Quote]
拼装在一起可以更新了,之前的问题还不知道为什么,谢谢了,今天遇到贵人了
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 renxinshe 的回复:]

引用 18 楼 zl3450341 的回复:

你不会忘记还有一个在这里等你的答复列。

不会忘记的,直接把值拼装在一起了,之前还不知道什么问题,之后再看看吧。
谢谢了啊
[/Quote]

问题是现在报错了?还是OK了? 报错了把错误贴出来一下
liukelin 2011-07-23
  • 打赏
  • 举报
回复
大胡子你很细心呀,别忘了加我好友,我需要你这样的人。
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zl3450341 的回复:]

你不会忘记还有一个在这里等你的答复列。
[/Quote]
不会忘记的,直接把值拼装在一起了,之前还不知道什么问题,之后再看看吧。
谢谢了啊
_jerrytiger 2011-07-23
  • 打赏
  • 举报
回复
大胡子无敌。。,大胡子威武。。。
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
你不会忘记还有一个在这里等你的答复列。
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
楼主,问题OK没有?
微风飘过 2011-07-23
  • 打赏
  • 举报
回复
占位符不需要加单引号
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
如果这个没有问题的话,你现在不要用占位符。

直接把值拼装成sql:
String updatesql = "update login set password = " +? where username = ?";


String updatesql = "update login set password ='"+this.getNewpwd2() +"' where username = '"+username+"'";
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
sql语法没问题啊。

你检查一下,你的?是中文的?还是英文的:
String updatesql = "update login set password = ? where username = ?";



  • 打赏
  • 举报
回复
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '? where username = ?' at line 1
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
com.mysql.jdbc.Util.getInstance(Util.java:386)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619)
com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1709)
com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1628)
com.game.action.PasswordAction.execute(PasswordAction.java:63)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
老张-AI 2011-07-23
  • 打赏
  • 举报
回复
贴完整一点哦。
  • 打赏
  • 举报
回复
public String execute() throws Exception {
String selsql = "select * from login where username = ? and password = ?";
Connection con = DBTool.getConnection();
PreparedStatement selstm = con.prepareStatement(selsql);
String username = ActionContext.getContext().getSession()
.get("username").toString();
System.out.println(username);
selstm.setString(1, username);
selstm.setString(2, this.getOldpwd());
ResultSet selrs = selstm.executeQuery();
if (selrs.next()) {
System.out.println("存在此用户");
String updatesql = "update login set password = ? where username = ?";
PreparedStatement updatestm = con.prepareStatement(updatesql);
updatestm.setString(1, this.getNewpwd2());
updatestm.setString(2, username);
System.out.println(updatesql);
int num = updatestm.executeUpdate(updatesql);
System.out.println(num);
if (num == 1) {
System.out.println("修改成功");
return SUCCESS;
} else {
System.out.println("修改失败");
return ERROR;
}
} else {
System.out.println("原始密码错误");
return ERROR;
}
}
加载更多回复(11)

81,122

社区成员

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

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