2013/02/24

eclipse の Tomcat/Java から JDBC で SQL Server 2012 にアクセスする方法


前のエントリー(以下)では、eclipse の DBViewer から SQL Server 2012 にアクセスしてみましたが、今度は Java /Tomcat のプログラムから SQL Server 2012 にアクセスしてみます。

DB もろもろの設定は前のエントリーを引き継ぐということで。

まず、JDBCドライバーを Tomcat の配下にコピーします。こうしないとビルドパスを通しても ClassNotFound Exception で落ちてしまうので。

  • コピー元:C:\Program Files\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\jpn\sqljdbc4.jar
  • コピー先:C:\pleiades\tomcat\6.0\lib\sqljdbc4.jar

プロジェクトを右クリックしてプロパティを選び、Java のビルド・パス >>ライブラリー の「外部 Jar 追加」からコピー先の JDBC ドライバーを追加します。

そして以下のようにサーブレットを作成します。

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MSSQLServer extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  PrintWriter out = resp.getWriter();

  try {
    Driver d = (Driver) Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        String connUrl =
          "jdbc:sqlserver://localhost:1433;database=Test;"
            + "user=user01;password=pass";
        Connection con = d.connect(connUrl, new Properties());

        String sql = "SELECT * FROM LOGIN;";
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {
          out.println(
            rs.getString("ID")
            + ", " + rs.getString("PASSWORD"));
        }

        rs.close();
        stmt.close();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
  }
}

実行結果は以下の通りで問題ありません。

sato, pass
yamada, pass

折角なので、プレースホルダを使用した処理に変更してみましょう。

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MSSQLServer extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter out = resp.getWriter();

    try {
        Driver d = (Driver) Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
        String connUrl =
          "jdbc:sqlserver://localhost:1433;database=Test;"
            + "user=user01;password=pass";
        Connection con = d.connect(connUrl, new Properties());

        String sql = "SELECT * FROM LOGIN WHERE ID = ? AND PASSWORD = ?;";
        PreparedStatement pstmt = con.prepareStatement(sql);
        pstmt.setString(1, "yamada");
        pstmt.setString(2, "pass");
        ResultSet rs = pstmt.executeQuery();

        while (rs.next()) {
          out.println(
            rs.getString("ID")
            + ", " + rs.getString("PASSWORD"));
        }

        rs.close();
        pstmt.close();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
   }
}

実行結果が以下のようになったので問題ありませんね。

yamada, pass


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから