ORA-00933: UPDATE 命令的 SQL 命令未正确结束 [关闭]

Posted

技术标签:

【中文标题】ORA-00933: UPDATE 命令的 SQL 命令未正确结束 [关闭]【英文标题】:ORA-00933: SQL command not properly ended for UPDATE command [closed] 【发布时间】:2019-08-28 04:17:56 【问题描述】:

我的更新命令抛出异常

Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","Durga");
st = con.createStatement();
br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Bonus Amount : ");
int bonus_amt = Integer.parseInt(br.readLine());
System.out.println("salary range:");
float sal_range = Float.parseFloat(br.readLine());
int rowCount = st.executeUpdate("UPDATE employee SET esal = esal "+bonus_amt+ " where esal <" +sal_range);

【问题讨论】:

将 sql 命令保存在一个变量 (String sql = "UPDATE employee ....") 中并在执行之前打印它以查看它的样子。还指示使用PreparedStatement 而不是将值直接注入到命令中,请参阅Exploit of a Mom(和Little Bobby Tables) 不要将值连接到 SQL 字符串中。了解如何正确使用 PreparedStatement:mkyong.com/jdbc/jdbc-preparestatement-example-update-a-record 【参考方案1】:

根据您的查询String"UPDATE employee SET esal = esal "+bonus_amt+ " where esal &lt;" +sal_range 我假设,您在set 关键字之后缺少一个运算符,如下所示:

"UPDATE employee SET esal = esal + " + bonus_amt + " where esal < " + sal_range

否则你会得到这样的查询:"UPDATE employee SET esal = esal 1 where esal &lt; 1"

P.S.:我忘了提一下,由于 sql 注入,自己编写查询 String 可能会很危险。

【讨论】:

以上是关于ORA-00933: UPDATE 命令的 SQL 命令未正确结束 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 错误:ORA-00933:SQL 命令未正确结束 00933。00000 -“SQL 命令未正确结束”

“ORA-00933: SQL 命令未正确结束”

SQL 中的 PIVOT 给出错误 - ORA-00933: SQL 命令未正确结束

ORA-00933: 运行创建序列命令时 SQL 命令未正确结束

ora-00933: sql 命令未正确结束怎么解决

ORA-00933: SQL 命令未正确结束