Simkell

【Jave】TomcatとPostgreSQLで行うWebアプリケーションの基礎4

現場ではOracleを使うことが多いですが、Oracleの導入は面倒くさそうなのでMySQLを導入しようかなと思ったんですが、最近人気のPostgreSQLに接続してDBとの連携を行います。

PostgreSQLを導入する

まずはPostreをインストールします https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
からダウンロードします。

C直下にpostgreフォルダを作ってそこにインストールしました。

スーパーユーザーのパスワードは任意のものでいいと思います。

ポートはデフォルトにしました。

ロケールは日本でいいと思います。

環境変数を設定します

PathにインストールしたPostgreフォルダのbinフォルダを指定します。

コマンドプロンプトでpsql –versionと打ってバージョン情報が出てくればOKです。

pgAdminを使う

pgAdminを使うと視覚的にpostgreを操作できます。

Object>Create>Databaseからsampleデータベースを作成しました。

次にスキーマを作成します。sampleスキーマを作ります

次に

次にタレントテーブルを作成します。

同じ要領で、テーブルにカラムを追加します。

id=integer
name=text

容易できたら、データを積んでいきます。
下記のSQLを発行してデータが登録されていることを確認します

insert into sample.talent values (1,'KenshiTakada');
insert into sample.talent values (2,'YoheiHurukawa');
insert into sample.talent values (3,'KatuhisaOta');

select * from sample.talent

またまた、同じ要領でユーザーを作成しておきます

ユーザーの権限はこんな感じにしておきました。
あとはDifinitionで任意のパスワードをセットしておきます。

jdbcを用意する

まずはダウンロードします https://jdbc.postgresql.org/download.html からダウンロード

ダウンロードしたjdbcはWEB-INF/libに入れておきます。

次にMETA-INFの中にcontext.xmlを作ります。そして中身を以下のようにします

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ROOT">
    <Resource name="jdbc/sample" auth="Container" type="javax.sql.DataSource" username="kenshi" password="password" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/sample" />
</Context>

次にWEB-INFの中にweb.xmlを作り、中身を以下のようにします

<?xml version="1.0" encoding="UTF-8"?>
			<resource-ref>
			    <description>DB Connection</description>
			    <res-ref-name>jdbc/sample</res-ref-name>
			    <res-type>javax.sql.DataSource</res-type>
			    <res-auth>Container</res-auth>
			</resource-ref>

次にデータベースにアクセスするServletファイルを作ります。
名前はDbtest.javaにしました。

package sample.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class Dbtest
 */
@WebServlet("/Dbtest")
public class Dbtest extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Dbtest() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		try {

			StringBuilder sb = new StringBuilder();
			sb.append("<h1>タレントリスト</h1>");
			sb.append("<ul>");

            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;

            InitialContext ctx = new InitialContext();
            DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sample");
            conn = ds.getConnection();

            pstmt = conn.prepareStatement("select name from sample.talent");
            pstmt.clearParameters();
            rs = pstmt.executeQuery();

            String result = null;
            while(rs.next()) {
                result = rs.getString("name");
                sb.append("<li>").append(result).append("</li>");
            }

            sb.append("</ul>");

            PrintWriter pw = response.getWriter();
            pw.write(sb.toString());
            pw.flush();
            pw.close();

            rs.close();
            pstmt.close();
            conn.close();


		}catch(Exception e) {
            e.printStackTrace();
        }


	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

DBに接続してデータの取得までできました。

JavaでWebアプリケーションを構築していく基礎と、DB連携までできるようになりました。

参考サイト