在這裏,您將學習如何按給定關鍵字搜索對應資料庫表字段的結果。假設有一個表的結構和數據記錄如下:
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', 'maxsu@xuhuhu.com', '廣州');
INSERT INTO `servlet_user` VALUES ('2', 'minsu', '233123', 'minsu@gmail.com', '海口');
INSERT INTO `servlet_user` VALUES ('3', 'avguser', 'fdsa123', 'avguser@qq.com', '廣州');
INSERT INTO `servlet_user` VALUES ('4', 'sumuser', 'fdsj124', 'sumuser@qq.com', '北京');
在這個例子中,我們從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.zaixian;
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.zaixian.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
,然後提交搜索,得到以下結果 -
上一篇:
Servlet註冊表單示例
下一篇:
Servlet上傳檔