Try   HackMD

DTOとDAOを使ったアプリケーション

課題のためコードのみ掲載

解説はそのうち書きます

フォルダ構造

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

コード一覧↓↓↓↓↓↓

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>


実行結果