Servlets - Truy cập cơ sở dữ liệu

Hướng dẫn này giả định rằng bạn đã hiểu về cách hoạt động của ứng dụng JDBC. Trước khi bắt đầu với việc truy cập cơ sở dữ liệu thông qua một servlet, hãy đảm bảo rằng bạn đã thiết lập môi trường JDBC thích hợp cùng với một cơ sở dữ liệu.

Để biết thêm chi tiết về cách truy cập cơ sở dữ liệu bằng JDBC và thiết lập môi trường của nó, bạn có thể xem qua Hướng dẫn JDBC của chúng tôi .

Để bắt đầu với khái niệm cơ bản, chúng ta hãy tạo một bảng đơn giản và tạo một vài bản ghi trong bảng đó như sau:

Tạo bảng

Để tạo Employees trong cơ sở dữ liệu TEST, sử dụng các bước sau:

Bước 1

Mở một Command Prompt và thay đổi thư mục cài đặt như sau:

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

Bước 2

Đăng nhập vào cơ sở dữ liệu như sau

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

Bước 3

Tạo bảng Employee trong TEST cơ sở dữ liệu như sau -

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>

Tạo bản ghi dữ liệu

Cuối cùng, bạn tạo một vài bản ghi trong bảng Nhân viên như sau:

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>

Truy cập cơ sở dữ liệu

Đây là một ví dụ cho thấy cách truy cập cơ sở dữ liệu TEST bằng Servlet.

// 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
   }
}

Bây giờ chúng ta hãy biên dịch servlet ở trên và tạo các mục sau trong 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>
....

Bây giờ hãy gọi servlet này bằng cách sử dụng URL http: // localhost: 8080 / DatabaseAccess sẽ hiển thị phản hồi sau:

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