Servlets - 数据库访问
本教程假设您了解 JDBC 应用程序的工作原理。在开始通过 servlet 访问数据库之前,请确保您已正确设置 JDBC 环境以及数据库。
有关如何使用 JDBC 访问数据库及其环境设置的更多详细信息,您可以阅读我们的 JDBC 教程。
从基本概念开始,让我们创建一个简单的表并在该表中创建一些记录,如下所示 −
创建表
要在 TEST 数据库中创建 Employees 表,请使用以下步骤 −
步骤 1
打开 命令提示符 并更改为安装目录,如下所示 −
C:\> C:\>cd Program Files\MySQL\bin C:\Program Files\MySQL\bin>
步骤 2
按如下方式登录数据库
C:\Program Files\MySQL\bin>mysql -u root -p Enter password: ******** mysql>
步骤 3
在 TEST 数据库中创建表 Employee,如下所示 −
mysql> use TEST; mysql> create table Employees ( id int not null, age int not null, first varchar (255), last varchar (255) ); Query OK, 0 rows affected (0.08 sec) mysql>
创建数据记录
最后,在员工表中创建几条记录,如下所示−
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal'); Query OK, 1 row affected (0.00 sec) mysql>
访问数据库
下面是一个示例,展示了如何使用 Servlet 访问 TEST 数据库。
// 加载所需的库
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class DatabaseAccess extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// JDBC 驱动程序名称和数据库 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL="jdbc:mysql://localhost/TEST";
// 数据库凭据
static final String USER = "root";
static final String PASS = "password";
// 设置响应内容类型
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Database Result";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">";
out.println(docType +
"<html>" ++
"<head><title>" + title + "</title></head>" ++
"<body bgcolor = \"#f0f0f0\">" ++
"<h1 align = \"center\">" + title + "</h1>
");
try {
// 注册 JDBC 驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 打开连接
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 执行 SQL 查询
Statement stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
// 从结果集提取数据
while(rs.next()){
//按列名检索
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//显示值
out.println("ID: " + id + "<br>");
out.println(", Age: " + age + "<br>");
out.println(", First: " + first + "<br>");
out.println(", Last: " + last + "<br>");
}
out.println("</body></html>");
// Clean-up environment
rs.close();
stmt.close();
conn.close();
} catch(SQLException se) {
//处理 JDBC 错误
se.printStackTrace();
} catch(Exception e) {
//处理 Class.forName 的错误
e.printStackTrace();
} finally {
//finally 块用于关闭资源
try {
if(stmt!=null)
stmt.close();
} catch(SQLException se2) {
} // nothing we can do
try {
if(conn!=null)
conn.close();
} catch(SQLException se) {
se.printStackTrace();
} //end finally try
} //end try
}
}
现在让我们编译上述 servlet 并在 web.xml 中创建以下条目
.... <servlet> <servlet-name>DatabaseAccess</servlet-name> <servlet-class>DatabaseAccess</servlet-class> </servlet> <servlet-mapping> <servlet-name>DatabaseAccess</servlet-name> <url-pattern>/DatabaseAccess</url-pattern> </servlet-mapping> ....
现在使用 URL http://localhost:8080/DatabaseAccess 调用此 servlet,它将显示以下响应 −
Database Result
ID: 100, Age: 18, First: Zara, Last: Ali ID: 101, Age: 25, First: Mahnaz, Last: Fatma ID: 102, Age: 30, First: Zaid, Last: Khan ID: 103, Age: 28, First: Sumit, Last: Mittal

