Java 带有用户输入的SQL查询
我有个错误 java.sql.SQLException:ORA-00933:sql命令未正确结束 当我尝试执行以下SQL语句时 在该语句中,当搜索客户名称时,它应该显示特定客户的所有租赁详细信息和反馈。“查询”是指用户在数据库中搜索名称(CustomerName)时的用户输入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
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;
作为旁注
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啊,我明白了,我会这样做并尝试一下。谢谢。:)啊,我明白了。我的导师教我旧式语法,所以我使用了它,但谢谢你的解释。:)