JSP/サーブレットでドーナツショップのサイトを作ろう5

JSP&Servlet

前回、更新ができるようになったので今回は削除ができるようにする。

作成

admin/main.jsp変更

まずは削除のリンクを追加しよう。admin/main.jspに以下のように追記する。

○WEB-INF/admin/main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*,model.*"%>
<%
	List<Donut> list=(List<Donut>)request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/donutshop/Main">公開ページを見る</a>
<form action="/donutshop/Admin" method="post" enctype="multipart/form-data">
商品名:<input type="text" name="name" required><br>
価格:<input type="number" name="price" step="10" required><br>
商品画像:<input type="file" name="imgname"><br>
<button type="submit">登録</button>
</form>

<% if(list != null && list.size()>0){ %>
<table border="1">
<%for(Donut d:list){ %>
<tr>
<td><img src="/donutshop/upload/<%=d.getImgname() %>"></td>
<td><%=d.getId() %></td>
<td><%=d.getName() %></td>
<td><%=d.getPrice() %></td>
<td>
<a href="/donutshop/Admin/Update?id=<%=d.getId() %>">更新</a>
</td>
<td>
<a href="/donutshop/Admin/Delete?id=<%=d.getId() %>" onclick="return confirm('削除してよろしいですか?')">削除</a>
</td>
</tr>
<%} %>
</table>
<%} %>
</body>
</html>

daoの追記

対象idのデータを削除する処理を以下のようにdaoに追記する

○dao.DonutDAO.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import model.Donut;

public class DonutDAO {
	private Connection db;
	private PreparedStatement ps;
	private ResultSet rs;

	private void connect() throws NamingException, SQLException {
		Context context = new InitialContext();
		DataSource ds = (DataSource) context.lookup("java:comp/env/donutapp");
		this.db = ds.getConnection();
	}

	private void disconnect() {
		try {
			if (rs != null) {
				rs.close();
			}
			if (ps != null) {
				ps.close();
			}
			if (db != null) {
				db.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void ConnectCheck() {
		try {
			this.connect();
			System.out.println("OK");
		} catch (NamingException | SQLException e) {
			e.printStackTrace();
		} finally {
			this.disconnect();
		}
	}

	public void insertOne(Donut donut) {
		try {
			this.connect();
			ps = db.prepareStatement("INSERT INTO donuts(name,price,imgname) VALUES(?,?,?)");
			ps.setString(1, donut.getName());
			ps.setInt(2, donut.getPrice());
			ps.setString(3, donut.getImgname());
			ps.execute();
		} catch (NamingException | SQLException e) {
			e.printStackTrace();
		} finally {
			this.disconnect();
		}
	}

	public List<Donut> findAll() {
		List<Donut> list = new ArrayList<>();
		try {
			this.connect();
			ps = db.prepareStatement("SELECT * FROM donuts");
			rs = ps.executeQuery();
			while (rs.next()) {
				int id = rs.getInt("id");
				String title = rs.getString("name");
				int price = rs.getInt("price");
				String imgname = rs.getString("imgname");
				list.add(new Donut(id, title, price, imgname));
			}
		} catch (NamingException | SQLException e) {
			e.printStackTrace();
		} finally {
			this.disconnect();
		}
		return list;
	}
	public Donut findOne(int id) {
		Donut donut = null;
		try {
			this.connect();
			ps=db.prepareStatement("SELECT * FROM donuts WHERE id=?");
			ps.setInt(1, id);
			rs=ps.executeQuery();
			if(rs.next()) {
				String name=rs.getString("name");
				int price=rs.getInt("price");
				String imgname=rs.getString("imgname");
				donut=new Donut(id,name,price,imgname);
			}
		} catch (NamingException | SQLException e) {
			e.printStackTrace();
		} finally {
			this.disconnect();
		}
		return donut;
	}
	public void updateOne(Donut donut) {
		try {
			this.connect();
			ps=db.prepareStatement("UPDATE donuts SET name=?,price=?,imgname=? WHERE id =?");
			ps.setString(1,donut.getName());
			ps.setInt(2, donut.getPrice());
			ps.setString(3, donut.getImgname());
			ps.setInt(4, donut.getId());
			ps.executeUpdate();
		} catch (NamingException | SQLException e) {
			e.printStackTrace();
		}finally {
			this.disconnect();
		}
	}
	public void deleteOne(int id) {
		try {
			this.connect();
			ps=db.prepareStatement("DELETE FROM donuts WHERE id=?");
			ps.setInt(1, id);
			ps.execute();
		} catch (NamingException | SQLException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}finally {
			this.disconnect();
		}
	}
}

AdminDelete.java作成

新規サーブレットからAdminDelete.javaを以下のように作成する。

○controller.AdminDelete.java

package controller;

import java.io.IOException;

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 dao.DonutDAO;

@WebServlet("/Admin/Delete")
public class AdminDelete extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id=request.getParameter("id");
		if(id != null) {
			DonutDAO dao=new DonutDAO();
			dao.deleteOne(Integer.parseInt(id));
		}
		response.sendRedirect("/donutshop/Admin");
	}
}

第5回終了

以上で第5回終了だ。ここまでで基本的なCRUD(Create,Read,Update,Delete)が行えるようになった。続きはこちら

コメント

タイトルとURLをコピーしました