Java 带有用户输入的SQL查询

Java 带有用户输入的SQL查询,java,sql,oracle,jsp,jdbc,Java,Sql,Oracle,Jsp,Jdbc,我有个错误 java.sql.SQLException:ORA-00933:sql命令未正确结束 当我尝试执行以下SQL语句时 在该语句中,当搜索客户名称时,它应该显示特定客户的所有租赁详细信息和反馈。“查询”是指用户在数据库中搜索名称(CustomerName)时的用户输入 SELECT c.CustomerName, r.Rental_ID, r.Staff_ID, r.RentalDate, r.DueDate, r.Customer_ID, f.Description FROM

我有个错误

java.sql.SQLException:ORA-00933:sql命令未正确结束

当我尝试执行以下SQL语句时

在该语句中,当搜索客户名称时,它应该显示特定客户的所有租赁详细信息和反馈。“查询”是指用户在数据库中搜索名称(CustomerName)时的用户输入

 SELECT c.CustomerName, r.Rental_ID, r.Staff_ID, r.RentalDate, r.DueDate,
 r.Customer_ID, f.Description 
 FROM Rental r, Customer c, FeedBack f 
 WHERE f.Customer_ID = r.Customer_ID 
 AND c.Customer_ID = f.Customer_ID 
 ORDER BY DueDate 
 WHERE CustomerName like "+ query +";

出了什么问题?

因为
WHERE
ORDER BY
子句的位置不正确;不仅如此,在查询中实际上还有两个
WHERE
子句。应该只有一个<代码>其中应首先出现,然后按排序。应该是这样

WHERE CustomerName like "+ query +"
ORDER BY DueDate;
作为旁注

  • 考虑使用参数化查询
  • 修改查询以使用ANSI标准
    JOIN
    语法,而不是旧式语法
  • 您的查询应该如下所示

    SELECT c.CustomerName, r.Rental_ID, 
    r.Staff_ID, r.RentalDate, 
    r.DueDate, r.Customer_ID, f.Description
    FROM Rental r  
    JOIN FeedBack f ON f.Customer_ID = r.Customer_ID
    JOIN Customer c ON c.Customer_ID = f.Customer_ID
    WHERE c.CustomerName like "+ query +"
    ORDER BY r.DueDate;
    

    我希望您不是将用户提供的名称直接添加到查询中,而是使用
    PreparedStatements
    ,以避免明显的sql注入漏洞。@E.Wong您的订单应该在where子句之后,更改这些位置并检查..嗯,是的,我确实有preparedstatement,只是没有包含在我的问题中。哈哈。xD啊,我明白了,我会这样做并尝试一下。谢谢。:)啊,我明白了。我的导师教我旧式语法,所以我使用了它,但谢谢你的解释。:)