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 <" +sal_range
我假设,您在set
关键字之后缺少一个运算符,如下所示:
"UPDATE employee SET esal = esal + " + bonus_amt + " where esal < " + sal_range
否则你会得到这样的查询:"UPDATE employee SET esal = esal 1 where esal < 1"
。
P.S.:我忘了提一下,由于 sql 注入,自己编写查询 String
可能会很危险。
【讨论】:
以上是关于ORA-00933: UPDATE 命令的 SQL 命令未正确结束 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQL 错误:ORA-00933:SQL 命令未正确结束 00933。00000 -“SQL 命令未正确结束”
SQL 中的 PIVOT 给出错误 - ORA-00933: SQL 命令未正确结束