Servlet 数据库访问


本教程假定您已经了解了 JDBC 应用程序的工作方式。在您开始学习 Servlet 数据库访问之前,请确保您已经有适当的 JDBC 环境设置和数据库。

从基本概念下手,让我们来创建一个简单的表,并在表中创建几条记录。

创建数据库表

在测试数据库 TEST 中创建 Employees 表,请按以下步骤进行:

步骤 1:

打开命令行提示符(Command Prompt),并更改进入到安装目录,如下所示:

  1. C:\>
  2. C:\>cd Program Files\MySQL\bin
  3. C:\Program Files\MySQL\bin>

步骤 2:

登录到数据库,如下所示:

  1. C:\Program Files\MySQL\bin>mysql -u root -p
  2. Enter password: ********
  3. mysql>

步骤 3:

在测试数据库 TEST 中创建 Employee 表,如下所示:

  1. mysql> use TEST;
  2. mysql> create table Employees
  3. (
  4. id int not null,
  5. age int not null,
  6. first varchar (255),
  7. last varchar (255)
  8. );
  9. Query OK, 0 rows affected (0.08 sec)
  10. mysql>

创建数据记录

最后,在 Employee 表中创建几条记录,如下所示:

  1. mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
  2. Query OK, 1 row affected (0.05 sec)
  3. mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
  4. Query OK, 1 row affected (0.00 sec)
  5. mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
  6. Query OK, 1 row affected (0.00 sec)
  7. mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
  8. Query OK, 1 row affected (0.00 sec)
  9. mysql>

访问数据库

下面的实例演示了如何使用 Servlet 访问 TEST 数据库。

  1. // 加载必需的库
  2. import java.io.*;
  3. import java.util.*;
  4. import javax.servlet.*;
  5. import javax.servlet.http.*;
  6. import java.sql.*;
  7. public class DatabaseAccess extends HttpServlet{
  8. public void doGet(HttpServletRequest request,
  9. HttpServletResponse response)
  10. throws ServletException, IOException
  11. {
  12. // JDBC 驱动器名称和数据库的 URL
  13. static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
  14. static final String DB_URL="jdbc:mysql://localhost/TEST";
  15.  
  16. // 数据库的凭据
  17. static final String USER = "root";
  18. static final String PASS = "password";
  19.  
  20. // 设置响应内容类型
  21. response.setContentType("text/html");
  22. PrintWriter out = response.getWriter();
  23. String title = "数据库结果";
  24. String docType =
  25. "<!doctype html public \"-//w3c//dtd html 4.0 " +
  26. "transitional//en\">\n";
  27. out.println(docType +
  28. "<html>\n" +
  29. "<head><title>" + title + "</title></head>\n" +
  30. "<body bgcolor=\"#f0f0f0\">\n" +
  31. "<h1 align=\"center\">" + title + "</h1>\n");
  32. try{
  33. // 注册 JDBC 驱动器
  34. Class.forName("com.mysql.jdbc.Driver");
  35.  
  36. // 打开一个连接
  37. conn = DriverManager.getConnection(DB_URL,USER,PASS);
  38.  
  39. // 执行 SQL 查询
  40. stmt = conn.createStatement();
  41. String sql;
  42. sql = "SELECT id, first, last, age FROM Employees";
  43. ResultSet rs = stmt.executeQuery(sql);
  44.  
  45. // 从结果集中提取数据
  46. while(rs.next()){
  47. // 根据列名称检索
  48. int id = rs.getInt("id");
  49. int age = rs.getInt("age");
  50. String first = rs.getString("first");
  51. String last = rs.getString("last");
  52.  
  53. // 显示值
  54. out.println("ID: " + id + "<br>");
  55. out.println(", Age: " + age + "<br>");
  56. out.println(", First: " + first + "<br>");
  57. out.println(", Last: " + last + "<br>");
  58. }
  59. out.println("</body></html>");
  60.  
  61. // 清理环境
  62. rs.close();
  63. stmt.close();
  64. conn.close();
  65. }catch(SQLException se){
  66. // 处理 JDBC 错误
  67. se.printStackTrace();
  68. }catch(Exception e){
  69. // 处理 Class.forName 错误
  70. e.printStackTrace();
  71. }finally{
  72. // 最后是用于关闭资源的块
  73. try{
  74. if(stmt!=null)
  75. stmt.close();
  76. }catch(SQLException se2){
  77. }// 我们不能做什么
  78. try{
  79. if(conn!=null)
  80. conn.close();
  81. }catch(SQLException se){
  82. se.printStackTrace();
  83. }//end finally try
  84. } //end try
  85. }
  86. }

现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:

  1. ....
  2. <servlet>
  3. <servlet-name>DatabaseAccess</servlet-name>
  4. <servlet-class>DatabaseAccess</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>DatabaseAccess</servlet-name>
  8. <url-pattern>/DatabaseAccess</url-pattern>
  9. </servlet-mapping>
  10. ....

现在调用这个 Servlet,输入链接:http://localhost:8080/DatabaseAccess,将显示以下响应结果:

  1. 数据库结果
  2. ID: 100, Age: 18, First: Zara, Last: Ali
  3. ID: 101, Age: 25, First: Mahnaz, Last: Fatma
  4. ID: 102, Age: 30, First: Zaid, Last: Khan
  5. ID: 103, Age: 28, First: Sumit, Last: Mittal