日期:2014-05-17  浏览次数:20701 次

prepareStatement.setString 问题求租
代码如下
  PreparedStatement preState = conn.prepareStatement( "ALTER USER \"?\" IDENTIFIED BY \"?\" REPLACE \"?\"");
  preState.setString(1, this.userId);
  preState.setString(2, newPassword);
  preState.setString(3, this.password);
  logger.debug("User" + this.userId + " NewPassword"+newPassword+" OldPassword:"+ this.password+"\nSQL:"+sql);
  preState.execute();
  preState.close();
  preState = null;

运行时总是提示:
Unable to change password, exception occurs java.sql.SQLException: ORA-01918: user ':1' does not exist


------解决方案--------------------
一把我们用PreparedStatement 都用的executeUpdate()或executeQuery执行啊。。
你这里是ALTER更改,那应该是executeUpdate()才对啊。。。

preState.execute()这种情况是在用Statement查询的时候执行用的, ,,你好像执行方法没有用对。。。。

你看看。。你用查询的方法去执行ALTER更改的操作。。。所以会报错。。。。参数有问题。。。因为驱动程序执行时,按照查询的语法来执行的。。。
------解决方案--------------------
ALTER 是修改表结构 
UPDATE 是修改表里的数据
完全2个意思~~

------解决方案--------------------
insert into biao values(?,?,?,?)
update biao set a=?, b=?
select /delete from biao where a=? and b like ? and c>?

只有这些?的地方可以用绑定变量

只要是ddl就不可能用绑定变量了,直接拼接SQL
------解决方案--------------------
探讨
insert into biao values(?,?,?,?)
update biao set a=?, b=?
select /delete from biao where a=? and b like ? and c>?

只有这些?的地方可以用绑定变量

只要是ddl就不可能用绑定变量了,直接拼接SQL