【问题标题】:SQL query with user input带有用户输入的 SQL 查询
【发布时间】:2016-08-13 03:39:23
【问题描述】:

我有一个错误

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 +";

出了什么问题?

【问题讨论】:

  • 我希望您不要直接将用户提供的名称附加到您的查询中,而是使用PreparedStatements 以避免明显的 sql 注入漏洞。
  • @E.Wong 你的 ORDER BY 应该在 where 子句更改这些地方并检查之后。
  • 嗯,是的,我已经准备好了声明,只是没有包含在我的问题中。哈哈。 xD 啊,我明白了,会这样做并尝试一下。谢谢。 :)

标签: java sql oracle jsp jdbc


【解决方案1】:

因为你在错误的地方有 WHEREORDER BY 子句;不仅您的查询中实际上有两个 WHERE 子句。应该只有一个。 WHERE 应该先出现,然后是 order by。应该是

WHERE CustomerName like "+ query +"
ORDER BY DueDate;

也作为旁注,

  1. 考虑使用参数化查询
  2. 修改您的查询以使用 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;

【讨论】:

  • 啊,我明白了。我的导师教我旧式语法,所以我使用它,但感谢您的解释。 :)
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多