在这里,您将学习如何按给定关键字搜索对应数据库表字段的结果。假设有一个表的结构和数据记录如下:
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@yiibai.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.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
,然后提交搜索,得到以下结果 -