本教程假定您已经了解了 JDBC 应用程序的工作方式。在您开始学习 Servlet 数据库访问之前,请确保您已经有适当的 JDBC 环境设置和数据库。
从基本概念下手,让我们来创建一个简单的表,并在表中创建几条记录。
在测试数据库 TEST 中创建 Employees 表,请按以下步骤进行:
打开命令行提示符(Command Prompt),并更改进入到安装目录,如下所示:
- C:\>
- C:\>cd Program Files\MySQL\bin
- C:\Program Files\MySQL\bin>
登录到数据库,如下所示:
- C:\Program Files\MySQL\bin>mysql -u root -p
- Enter password: ********
- mysql>
在测试数据库 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>
最后,在 Employee 表中创建几条记录,如下所示:
- 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 = "数据库结果";
- String docType =
- "<!doctype html public \"-//w3c//dtd html 4.0 " +
- "transitional//en\">\n";
- out.println(docType +
- "<html>\n" +
- "<head><title>" + title + "</title></head>\n" +
- "<body bgcolor=\"#f0f0f0\">\n" +
- "<h1 align=\"center\">" + title + "</h1>\n");
- try{
- // 注册 JDBC 驱动器
- Class.forName("com.mysql.jdbc.Driver");
- // 打开一个连接
- conn = DriverManager.getConnection(DB_URL,USER,PASS);
- // 执行 SQL 查询
- 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>");
- // 清理环境
- rs.close();
- stmt.close();
- conn.close();
- }catch(SQLException se){
- // 处理 JDBC 错误
- se.printStackTrace();
- }catch(Exception e){
- // 处理 Class.forName 错误
- e.printStackTrace();
- }finally{
- // 最后是用于关闭资源的块
- try{
- if(stmt!=null)
- stmt.close();
- }catch(SQLException se2){
- }// 我们不能做什么
- 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>
- ....
现在调用这个 Servlet,输入链接:http://localhost:8080/DatabaseAccess,将显示以下响应结果:
- 数据库结果
- 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