Servlets-database-access

提供:Dev Guides
移動先:案内検索

サーブレット-データベースアクセス

このチュートリアルは、JDBCアプリケーションの動作を理解していることを前提としています。 サーブレットを介したデータベースアクセスを開始する前に、データベースとともに適切なJDBC環境が設定されていることを確認してください。

JDBCとその環境設定を使用してデータベースにアクセスする方法の詳細については、リンク:/jdbc/index [JDBCチュートリアル]を参照してください。

基本的な概念から始めるために、次のように簡単なテーブルを作成し、そのテーブルにいくつかのレコードを作成しましょう-

テーブルを作成

TESTデータベースに*従業員*テーブルを作成するには、次の手順を使用します-

ステップ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

次のように 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>

データベースへのアクセス

サーブレットを使用して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
   }
}

次に、上記のサーブレットをコンパイルして、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を使用してこのサーブレットを呼び出します-

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