Servlet查詢搜索數據示例
在這裏,您將學習如何按給定關鍵字搜索對應數據庫表字段的結果。假設有一個表的結構和數據記錄如下:
DROP TABLE IF EXISTS `servlet_user`;
CREATE TABLE `servlet_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`passwd` varchar(32) NOT NULL DEFAULT '',
`email` varchar(32) DEFAULT NULL,
`city` varchar(24) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of servlet_user
-- ----------------------------
INSERT INTO `servlet_user` VALUES ('1', 'maxsu', '123456', '[email protected]', '廣州');
INSERT INTO `servlet_user` VALUES ('2', 'minsu', '233123', '[email protected]', '海口');
INSERT INTO `servlet_user` VALUES ('3', 'avguser', 'fdsa123', '[email protected]', '廣州');
INSERT INTO `servlet_user` VALUES ('4', 'sumuser', 'fdsj124', '[email protected]', '北京');
在這個例子中,我們從servlet中查詢數據庫servlet_user
表中的數據並將結果打印。爲了簡化程序,我們在Servlet中執行所有數據庫操作邏輯。但在現實應用中最好將它與servlet文件分開,如把數據庫操作部分放到獨立的DAO
文件中。
按給定關鍵字搜索的示例
打開Eclipse,創建一個動態Web項目:SearchExample,其完整的目錄結構如下所示 -
以下是這個項目中的幾個主要的代碼文件。
在這個例子中,創建了以下幾個文件 -
- index.html - 表單顯示
- Search.java - 執行輸入關鍵字收集,連接數據庫和查詢操作的Servlet類。
- web.xml - 項目Servlet的配置和描述符文件。
文件:index.html
該頁面顯示從用戶輸入的關鍵字的表單,並將此數據轉發到servlet,servlet負責根據給定的關鍵字查詢表中的數據記錄並顯示結果。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>根據關鍵字搜索示例</title>
</head>
<body>
<div style="margin: 0px; text-align: center;">
<form action="search">
關鍵字:<input type="text" name="keyword" /><input type="submit"
value="搜索" />
</form>
</div>
</body>
</html>
文件:Search.java
這是根據用戶輸入關鍵字,然後查詢數據庫中相關記錄並打印匹配數據的記錄的servlet文件。 在這個頁面中,我們顯示數據庫的列名和數據,所以使用ResultSetMetaData
接口。
package com.yiibai;
import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class Search extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String keyword = request.getParameter("keyword");
//int keyword = Integer.valueOf(keyword);
if(keyword==null) {
keyword = "";
}
try {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8",
"root", "123456");
} catch (Exception e) {
System.out.println(e);
}
PreparedStatement ps = con.prepareStatement("SELECT * FROM `servlet_user` where name LIKE ?");
ps.setString(1, "%"+keyword+"%");
out.print("<table width=50% border=1>");
out.print("<caption>Result:</caption>");
ResultSet rs = ps.executeQuery();
/* 打印表字段的名稱 */
ResultSetMetaData rsmd = rs.getMetaData();
int total = rsmd.getColumnCount();
out.print("<tr>");
for (int i = 1; i <= total; i++) {
out.print("<th>" + rsmd.getColumnName(i) + "</th>");
}
out.print("</tr>");
/* Printing result */
while (rs.next()) {
out.print("<tr><td>" + rs.getInt(1) + "</td><td>" + rs.getString(2) + "</td><td>" + rs.getString(3)
+ "</td><td>" + rs.getString(4) + "</td><td>" + rs.getString(5) + "</td></tr>");
}
out.print("</table>");
} catch (Exception e2) {
e2.printStackTrace();
}
finally {
out.close();
}
}
}
文件:web.xml
這是向容器提供servlet信息的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>SearchExample</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Search</servlet-name>
<servlet-class>com.yiibai.Search</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Search</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
</web-app>
在編寫上面代碼後,部署此Web應用程序(在項目名稱上點擊右鍵->」Run On Server…」),打開瀏覽器訪問URL: http://localhost:8080/SearchExample/ ,如果沒有錯誤,應該會看到以下結果 -
在上面關鍵字輸入框中輸入:su
,然後提交搜索,得到以下結果 -