# DTOとDAOを使ったアプリケーション
## 課題のためコードのみ掲載
## 解説はそのうち書きます
## フォルダ構造

## コード一覧↓↓↓↓↓↓
Address.java(サーブレット)
```
package kadai04;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Purchase
*/
@WebServlet("/Address")
public class Address extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Address() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//データベース接続管理クラスの変数宣言
DBManager dbm = new DBManager();
//個人情報取得
AddressDTO[] list = dbm.getData();
//HTTPRequestに格納
request.setAttribute("data", list);
//サーブレットの転送
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/address.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
if(!request.getParameter("name").equals("")) {
AddressDTO dto = new AddressDTO();
dto.setName(request.getParameter("name"));
dto.setAddress(request.getParameter("address"));
dto.setTel(request.getParameter("tel"));
//データベース接続管理クラスの変数宣言
DBManager dbm = new DBManager();
//個人情報取得
dbm.saveData(dto);
}
doGet(request, response);
}
}
```
AddressDAO.java(DAOクラス)
```
package kadai04;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class AddressDAO {
// データベース接続に必要な情報
final String DSN = "jdbc:mysql://localhost:3306/kadai04?characterEncoding=utf8";
final String USER = "root";
final String PASSWORD = null;
// データベースの接続情報を返す
public Connection getConnection(){
Connection conn = null;
try {
// JDBC ドライバのロード
Class.forName("com.mysql.jdbc.Driver");
// データベースへ接続
conn = DriverManager.getConnection(DSN, USER, PASSWORD);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
// Connection 型変数が持つデータベースと JDBC リソースの解放
public void close(Connection conn) {
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// PreparedStatement 型変数が持つデータベースと JDBC リソースの解放
public void close(Statement stmt) {
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// ResultSet 型変数が持つデータベースと JDBC リソースの解放
public void close(ResultSet rset) {
if(rset != null){
try {
rset.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
AddressDTO.java
```
package kadai04;
import java.util.Date;
public class AddressDTO {
private int id;
private String name;
private String address;
private String tel;
private Date date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
```
DBManager.java
```
package kadai04;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class DBManager extends AddressDAO {
public AddressDTO[] getData() {
Connection conn = null; // データベース接続情報
PreparedStatement pstmt = null; // SQL 管理情報
ResultSet rset = null; // 検索結果
AddressDTO[] datas = null; //個人情報
String sql = "SELECT * FROM address ORDER BY id DESC";
try {
// データベース接続情報取得
conn = getConnection();
// SELECT 文の登録と実行
pstmt = conn.prepareStatement(sql); // SELECT 構文登録
rset = pstmt.executeQuery();
//1件1件のデータを格納
ArrayList<AddressDTO> list = new ArrayList<AddressDTO>();
// 検索結果があれば
while (rset.next()) {
// 必要な列から値を取り出し、個人情報オブジェクトを生成
AddressDTO data = new AddressDTO();
data.setId(rset.getInt("id"));
data.setName(rset.getString("name"));
data.setAddress(rset.getString("address"));
data.setTel(rset.getString("tel"));
data.setDate(rset.getDate("date"));
list.add(data);
}
//1件1件のデータを配列にまとめていく
datas = new AddressDTO[list.size()];
for (int i = 0; i < list.size(); i++) {
datas[i] = list.get(i);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// データベース切断処理
close(rset);
close(pstmt);
close(conn);
}
return datas;
}
public void saveData(AddressDTO dto) {
Connection conn = null; // データベース接続情報
PreparedStatement pstmt = null; // SQL 管理情報
ResultSet rset = null; // 検索結果
String sql = "INSERT INTO address(name,address,tel,date) VALUES (?,?,?,now())";
try {
// データベース接続情報取得
conn = getConnection();
pstmt = conn.prepareStatement(sql);
//SQL文(追加処理)の作成と実行
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getAddress());
pstmt.setString(3, dto.getTel());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// データベース切断処理
close(rset);
close(pstmt);
close(conn);
}
}
}
```
address.jsp
```
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="kadai04.AddressDTO" %>
<%
AddressDTO[] list = (AddressDTO[])request.getAttribute("data");
%>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アドレス帳</title>
</head>
<body>
<h1>アドレス帳</h1>
<form method="post" action="Address">
名前:<input type="text" name="name"><br />
住所:<input type="text" name="address"><br />
TEL:<input type="text" name="tel"><br />
<input type="submit" value="登録">
</form>
<p>
<table border=1>
<tr>
<td>名前</td>
<td>住所</td>
<td>TEL</td>
<td>登録日時</td>
</tr>
<%
for (int i = 0; i < list.length; i++) {
out.print("<tr><td>"+ list[i].getName() +"</td>"); //名前
out.print("<td>"+ list[i].getAddress() +"</td>"); //住所
out.print("<td>"+ list[i].getTel() +"</td>"); //電話番号
out.print("<td>"+list[i].getDate()+"</td></tr>"); //日時
}
%>
</table>
</body>
</html>
```
## 実行結果

