［Java/PostgreSQL］WEBアプリをデータベースに接続する

### この記事の内容
Eclipseで開発しているWEBアプリとデータベースを接続する方法

### この記事を書いた理由
忘れた時に確認するため

### この記事を書いた人の特徴
2011年 国立大教育学部卒（当時、プログラミングに全く興味なし）
大学卒業後、伊勢丹・リクルート等で勤務。
2016年頃〜 独学でプログラミングの勉強をスタート
（Railsでアプリを開発できるようになる）
2018年〜 SEとして勤務

RailsではDBの設定はコマンドを入力すれば自動的に処理できた。
Javaでは、その設定を自分でする必要があるのでその勉強を兼ねてこの記事を書いた。

### 開発環境
PC: Mac
OS: MacOS Mojave
言語: Java
IDE: Eclipse
DB: PostgreSQL
DB管理ツール: pgAdmin


### 前提条件
#### 接続先のデータベースについて
・接続先のデータベースは、ローカル環境（ポート：5432）である
・sampleデータベースにはcustomerテーブルが存在する
・customerテーブルには下記のサンプルデータが格納されている

```SQL:SQL
SELECT * FROM customer;
```

```txt:実行結果
  id  |   name   |        email        | password 
------+----------+---------------------+----------
 0001 | sample1  | sample1@sample.com  | password
 0002 | sample2  | sample2@sample.com  | password
 0003 | sample3  | sample3@sample.com  | password
 0004 | sample4  | sample4@sample.com  | password
 0005 | sample5  | sample5@sample.com  | password
 0006 | sample6  | sample6@sample.com  | password
 0007 | sample7  | sample7@sample.com  | password
 0008 | sample8  | sample8@sample.com  | password
 0009 | sample9  | sample9@sample.com  | password
 0010 | sample10 | sample10@sample.com | password
(10 rows)
```

#### Eclipseで開発しているWEBアプリについて
・このWEBアプリは、動的WEBプロジェクト（Dynamic WEB Project）として作成
・このWEBアプリは http://localhost:8080/sample/sample2 にアクセスすることを想定する


### コード例
```java:Sampleapp2.java
package jp.co.sample;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class Sampleapp2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<style>table,th,td,tr{border: 1px solid black};</style>");
		out.println("<body>");
		out.println("<h1>Sampleapp by Java Servlet</h1>");
		out.println("</body>");
		out.println("</html>");
		
		String url = "jdbc:postgresql://localhost:5432/sample";
		String user = "USERNAME";
		String password = "PASSWORD";
		
		try{
			Class.forName("org.postgresql.Driver");
			System.out.println("データベースの接続に成功しました");
		} catch(Exception e) {
			e.printStackTrace();
		}
		
		
        try {
        	Connection conn = DriverManager.getConnection(url, user, password);
        	conn.setAutoCommit(false);
        	Statement stmt = conn.createStatement();
            String sql = "SELECT * FROM customer";
            ResultSet rset = stmt.executeQuery(sql);
            
            out.println("<table>");
            out.println("<tr><th>ID</th><th>UserName</th><th>Email</th></tr>");
            
            while(rset.next()) {
            	out.println("<tr><td>" + rset.getString("id") + "</td><td>" + rset.getString("name") + "</td><td>" + rset.getString("email") + "</td></tr>");
            }
            
            out.println("</table>");
        	
        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
		

	}
}
```

### ポイント
`WEB-INF/lib` ディレクトリに **.jarファイル** を配置する
![スクリーンショット 2019-05-12 16.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/d9198b8d-9698-95b8-641e-3e42b1a5d514.png)


### 実行結果
WEBアプリのサーバーを実行し、http://localhost:8080/sample/sample2 にアクセスする

```txt:Eclipseのコンソール
5月 12, 2019 4:26:33 午後 org.apache.catalina.startup.VersionLoggerListener log
情報: Server version name:   Apache Tomcat/9.0.14

（中略）

5月 12, 2019 4:26:35 午後 org.apache.catalina.startup.Catalina start
情報: サーバーの起動 [1,215]ms
データベースの接続に成功しました
```

ブラウザで画面を確認
![スクリーンショット 2019-05-12 16.52.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/5170b024-41bd-ba10-7b1e-1cb495619c5f.png)
データベースに格納したデータがブラウザに表示されていることが確認できた。

### 今後やりたいこと
データの保存・編集・更新・削除
AWS上に置いたDBとの連携

### 感想
Railsではコマンド数行書いて実行すれば自動的に設定できるDB.
Javaでは一つ一つ自分で設定しなければならないのが面倒。