我正在尝试使用JSP和tomcat创建一个web界面。我有一个学生和他们的信息表,我希望用户能够搜索一个学生,然后我想显示该学生的所有信息(在一个表中)。到目前为止,我已经显示了整个student表并创建了一个搜索框,但是现在当用户单击“search”时,我不知所措。我正在考虑创建一个搜索数据库的函数,但我不确定如何做到这一点,因为我是JSP新手。如何调用函数?这是我到目前为止的代码:
<%@ page import="java.sql.*" %>
<%
String connectionURL =
"jdbc:postgresql://cop4715-postgresql.ucf.edu:8472/******?user=*******&password=******";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
%>
<html><body>
<h1>Student Table</h1>
<table border = "2">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Birthday</th>
<th>Address</th>
<th>Email</th>
<th>Level</th>
</tr>
</thead>
<%
Class.forName("org.postgresql.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL);
statement = connection.createStatement();
rs = statement.executeQuery("SELECT * FROM students");
ResultSetMetaData metadata = rs.getMetaData();
while (rs.next()) { %>
<tr>
<%
for(int i = 1; i <= metadata.getColumnCount(); i++){ %>
<td>
<%=rs.getString(i)%>
</td>
<%
}
%>
</tr>
<%
}
%>
</table>
<%
rs.close();
%>
<br>
<form action = test()>
Search By Name: <input type="text" name="Name">
<input type ="submit" value="Search">
</form>
</body></html>
最佳答案
你调用函数的思路不正确。为什么?因为,一个函数将调用在客户端执行的JavaScript,而您希望从服务器端的数据库中检索数据,就像您已经在使用<% scriptlets %>
*一样,如下所示
<form action = test()>
实现这一点的最简单方法是自提交JSP,即HTML表单将数据发送到在中定义的同一JSP。您只需完全删除
action
属性即可完成此操作。现在,为了区分JSP是应该检索所有学生的数据还是一个特定的学生的数据,您将更改代码以检查
Name
请求属性,如下所示。String name = request.getParameter("Name");
if (name != null && name.length() > 0) {
rs = statement.executeQuery("SELECT * FROM students WHERE Name = '" + name + "'");
} else {
rs = statement.executeQuery("SELECT * FROM students");
}
因为上面的查询现在已经参数化了,所以强烈建议现在使用
PreparedStatement
。if (name != null && name.length() > 0) {
PreparedStatement ps = connection.prepareStatement(
"SELECT * FROM students WHERE Name = ?"); // ? = placeholder
ps.setString(1, name); // Bind the value to the placeholder
rs = ps.executeQuery(); // Execute the prepared statement and fetch results
}
PreparedStatement
有助于避免SQL注入攻击,并消除笨拙且容易出错的字符串连接。*scrptlet早就被弃用了。一种更好的方法是将一个Servlet放在处理所有JDBC代码的中间,用结果填充
request
对象,然后转发到一个JSP,该JSP只处理结果如何呈现给用户。