【发布时间】:2016-09-26 04:14:10
【问题描述】:
我正在尝试在我的 SQL 数据库中搜索条目,但每当我在搜索栏中输入单引号并运行它时,都会出现错误。当我键入特定名称时,它会从数据库中返回正确的条目。我已经阅读了有关使用“”、转义和使用准备好的语句的信息,但要么没有一个答案适合我的情况,要么我在概念上不理解某些东西。 (我是初学者)提前谢谢! :)
下面是我的 jsp 文件的代码,运行时的样子,以及插入单引号时会发生什么。
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>List of Entries</title>
</head>
<body>
<h1>Retrieve Data</h1>
<form method="post" action="index.jsp">
Search <input type="text" name="search"
placeholder="Enter your search here..." />
<input type="submit"
value="Search" name="submit"/>
</form><br><br>
<%
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
ResultSet rs2 = null;
try {
String searchReq = request.getParameter("search");
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//make connection to db
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/profile", "root", "");
//create a statement
stmt = con.createStatement();
//executes SQL query
rs = stmt.executeQuery("SELECT * FROM person WHERE Name LIKE '%"+ searchReq +"%'");
%>
<table border="1">
<tr>
<td><b>Name</b></td>
<td><b>Birthday</b></td>
<td><b>Address</b></td>
<td><b>Gender</b></td>
<td><b>School</b></td>
</tr>
<%
try {
while (rs.next()) {
%>
<tr>
<td><%=rs.getString("Name")%></td>
<td><%=rs.getString("Birthday")%></td>
<td><%=rs.getString("Address")%></td>
<td><%=rs.getString("Gender")%></td>
<td><%=rs.getString("School")%></td>
</tr>
<%
}
} catch (Exception e) {
e.printStackTrace();
}
%>
</table>
<%
}
catch (Exception e) {
e.printStackTrace();
}
finally {
rs.close();
stmt.close();
con.close();
}
%>
</body>
</html>
【问题讨论】:
-
不要对查询进行更严格的字符串化,使用参数。另外你使用的是什么SQL? (SQL-Server、MYSQL、Oracle)
-
@Chuck MYSQL。对不起,你说的更紧是什么意思?
-
改用
PreparedStatement。并从您的 JSP 页面中删除所有 Java 代码和 SQL 语句。该逻辑应该在 servlet 或自定义标记中。
标签: java mysql sql search quotes