データベース接続テスト

広告

データベースの準備ができましたので、実際に接続を行ってみます。

web.xmlファイルは下記のようにしました。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>databasetest</servlet-name>
    <servlet-class>DatabaseTest1</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>databasetest</servlet-name>
    <url-pattern>/databasetest</url-pattern>
  </servlet-mapping>
</web-app>

プログラムは下記の通りです。

DatabaseTest1.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class DatabaseTest1 extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>データベーステスト</title>");
    out.println("</head>");
    out.println("<body>");

    out.println("<p>");

    Connection conn = null;
    String url = "jdbc:mysql://localhost/jdbctestdb";
    String user = "testuser";
    String password = "testpass";

    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      out.println("ドライバのロードに成功しました<br>");

      conn = DriverManager.getConnection(url, user, password);
      out.println("データベース接続に成功しました<br>");
    }catch (ClassNotFoundException e){
      out.println("ClassNotFoundException:" + e.getMessage());
    }catch (SQLException e){
      out.println("SQLException:" + e.getMessage());
    }catch (Exception e){
      out.println("Exception:" + e.getMessage());
    }finally{
      try{
        if (conn != null){
          conn.close();
          out.println("データベース切断に成功しました");
        }else{
          out.println("コネクションがありません");
        }
      }catch (SQLException e){
        out.println("SQLException:" + e.getMessage());
      }
    }

    out.println("</p>");

    out.println("</body>");
    out.println("</html>");
  }
}

上記をコンパイル後に「d:¥servlet-sample¥database¥WEB-INF¥classes¥」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/database/databasetest」へアクセスしてみます。

データベース接続のテスト

データベース接続と切断が無事出来ました。

エラーの確認

エラーが発生する場合の挙動も確認しておきます。まずデータベース名を実際には存在しない値にした場合です。

String url = "jdbc:mysql://localhost/jdbctestdb";

を下記に変更

String url = "jdbc:mysql://localhost/jdbctestdb2";

実行結果は下記のようになります。

データベース接続のテスト

エラーメッセージは下記の通りです。

SQLException:Access denied for user 'testuser'@'localhost' to database 'jdbctestdb2' 

次はデータベース接続アカウントのユーザー名が間違っていた場合です。

String user = "testuser";

を下記に変更

String user = "testuser2";

実行結果は下記のようになります。

データベース接続のテスト

エラーメッセージは下記の通りです。

SQLException:Access denied for user 'testuser2'@'localhost' (using password: YES)

最後にデータベース接続アカウントのパスワードが間違っていた場合です。

String password = "testpass";

を下記に変更

String password = "testpass2";

実行結果は下記のようになります。

データベース接続のテスト

エラーメッセージは下記の通りです。

SQLException:Access denied for user 'testuser'@'localhost' (using password: YES)

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)