我是jsp的新手。这就是我要做的事情: - >从用户处获取关键字输入(来自jsp表单) - >在任何列中包含给定关键字的postgres关系数据库中搜索特定关系的元组。
我正在使用JDBC。我认为一切都很顺利,直到我发现一些具有给定关键字的元组没有被显示。
关于数据库: 数据库名称是' university'。我在我的数据库中有一个关系'当然'有参数(course_id,title,dept_name,credits)
以下是jsp页面的代码,我将从用户那里获取输入关键字:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>search courses</title>
</head>
<body>
<h1>Search for courses</h1>
<FORM ACTION="coursesearch.jsp" METHOD="POST">
Type the keyword to search in course
<br> <input type="text" name="keyword" />
<br> <INPUT TYPE="SUBMIT" value="Submit">
</FORM>
</body>
</html>
这是&#39; coursesearch.jsp&#39;的代码。它显示了当前给出关键字的行:
<%@ page import="java.sql.*" %>
<% Class.forName("org.postgresql.Driver"); %>
<html>
<head>
<title>Question2</title>
</head>
<body>
<h1>Courses Containing the given keyword : </h1>
<%
Connection connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/university","postgres","password");
Statement statement1 = connection.createStatement();
String keyword = request.getParameter("keyword");
String sql = "select course_id,title from course where LOWER(title) LIKE LOWER(?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "%" + keyword + "%");
ResultSet resultset1 = preparedStatement.executeQuery();
if(!resultset1.next()){
out.println("Sorry no course found having given keyword");
}
else {
%>
<p>
Course IDs containing the given keyword
</p>
<table border="1">
<tr>
<th>Course ID</th>
<th>Course title </th>
<% while(resultset1.next()){ %>
<tr>
<td> <%=resultset1.getString(1)%> </td>
<td> <%=resultset1.getString(2)%> </td>
</tr>
<%
resultset1.next();
} %>
</table>
<br>
<% }
connection.close();
%>
</body>
</html>
对我来说一切都很好,但表格并没有显示所有有效的元组。说真的,我需要你们的帮助。 (抱歉我的英语不好)。
答案 0 :(得分:1)
您正在使用ResultSet
中的行而没有注意到。
下面:
if(!resultset1.next()){
//here you move from row 0 to row 1
然后在这里:
while(resultset1.next()){
最后,在这里:
resultset1.next();
基本上,您的代码如下所示:
if(!resultset1.next()) {
//advanced to the first row, but not consumed
while(resultset1.next()){
//advanced to the following row
//consumed this one...
resultset1.next();
//yet again advancing to the next row
//and not consuming it
}
}
相关:ResultSet.getString(1) throws java.sql.SQLException: Invalid operation at current cursor position
最后但同样重要的是,帮自己一个忙,avoid using scriptlets。
答案 1 :(得分:-1)
<%
try{
ResultSet rs = Database.getData("select * from event");
while(rs.next()){
%>
<tr>
<td><%= rs.getString("id") %></td>
<td><%= rs.getString("time") %></td>
<td><%= rs.getString("event") %></td>
<td><a href="#" class="btn btn-xs btn-warning"><span class="glyphicon glyphicon-trash"></span> Remove</a></td>
</tr>