Servlet - 数据库访问

  • 简述

    本教程假设您了解 JDBC 应用程序的工作原理。在开始通过 servlet 访问数据库之前,请确保您有正确的 JDBC 环境设置以及数据库。
    从基本概念开始,让我们创建一个简单的表并在该表中创建几条记录,如下所示 -
  • 创建表

    要创建 Employees TEST 数据库中的表,使用以下步骤 -

    第1步

    打开一个 Command Prompt 并更改到安装目录如下 -
    
    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步

    创建表 EmployeeTEST 数据库如下 -
    
    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, 'Alex', 'Moo');
    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 数据库。
    
    // Loading required libraries
    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 driver name and database URL
          static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
          static final String DB_URL="jdbc:mysql://localhost/TEST";
          //  Database credentials
          static final String USER = "root";
          static final String PASS = "password";
          // Set response content type
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          String title = "Database Result";
          
          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 {
             // Register JDBC driver
             Class.forName("com.mysql.jdbc.Driver");
             // Open a connection
             Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             // Execute SQL query
             Statement stmt = conn.createStatement();
             String sql;
             sql = "SELECT id, first, last, age FROM Employees";
             ResultSet rs = stmt.executeQuery(sql);
             // Extract data from result set
             while(rs.next()){
                //Retrieve by column name
                int id  = rs.getInt("id");
                int age = rs.getInt("age");
                String first = rs.getString("first");
                String last = rs.getString("last");
                //Display values
                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) {
             //Handle errors for JDBC
             se.printStackTrace();
          } catch(Exception e) {
             //Handle errors for Class.forName
             e.printStackTrace();
          } finally {
             //finally block used to close resources
             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,它将显示以下响应 -
    
    ID: 100, Age: 18, First: Alex, Last: Moo
    ID: 101, Age: 25, First: Mahnaz, Last: Fatma
    ID: 102, Age: 30, First: Zaid, Last: Khan
    ID: 103, Age: 28, First: Sumit, Last: Mittal