서블릿 데이터베이스 액세스


이 튜토리얼에서는 여러분이 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단계:

다음과 같이 테스트 데이터베이스 TESTEmployee 테이블을 생성합니다. 표시:

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

이제 위의 서블릿을 컴파일하고 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>
....

이제 이 서블릿을 호출하려면 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