今回の記事はこちらの記事の続きとなっております。
現在Java(サーブレット・jsp) x PostgreSQLを使ってTodoアプリを作成しています。現時点での機能は次のとおりです。
そして今回はTodoの削除機能を追加していきます。
- 一覧画面に削除リンクを設置する
- 削除リンクが押されると削除サーブレットで処理を行いTodoをデータベースから削除する
その他の機能はこちらにまとめています。
GitHubにソースがあるので、参考にしてください!ご質問等あればこちらのTwitterアカウントまでお願いします。
DeleteDAOの作成
まずは実際にデータベースに接続してTodoを削除するDeleteDAOを作成します。DeleteDAOはdeleteTodoメソッドを持ちます。このメソッドで削除するTodoのidを受け取り、データを削除します。
package model.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import model.DBConnection;
public class DeleteDAO {
/**
* Todoを削除する
* @return 削除した行数
* @throws SQLException
* @throws ClassNotFoundException
*/
public int deleteTodo(int id) throws SQLException, ClassNotFoundException {
int processingNumber = 0;
// SQL文
String sql = "DELETE FROM todo WHERE id = ?";
// DBに接続し、Todoを削除する
try(Connection con = DBConnection.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)) {
// idを設定する
pstmt.setInt(1, id);
// SQLを実行する
processingNumber = pstmt.executeUpdate();
}
return processingNumber;
}
}
DeleteServletの作成
次にリクエストを受け付け、先ほど作成したDeleteDAOを使ってTodoを削除するDeleteServletを作成します。
/**
* Getリクエストを受け付けてTodoを削除する
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// リクエストパラメータから削除するTodoのidを取得する
int id = Integer.parseInt(request.getParameter(Parameters.TODO_ID));
DeleteDAO dao = new DeleteDAO();
try {
// todoを削除する
dao.deleteTodo(id);
} catch(SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
response.sendRedirect("list-servlet");
}
加えてDeleteServletが宣言されている上にDeleteServletのパスがあるので、これを「delete-servlet」に変更しておきます。
@WebServlet("/delete-servlet")
public class DeleteServlet extends HttpServlet
list.jspの編集
次にlist.jspに削除サーブレットを呼び出すためのリンクを追加します。これでリンクが押された時に削除サーブレットにリクエストが送られます。
<div>
<h5><%=todo.getTodo()%></h5>
<h6><%=todo.getTimeLimit()%></h6>
<a href="update-servlet?<%=Parameters.TODO_ID %>=<%= todo.getId() %>">todoを更新する</a>
<a href="delete-servlet?<%=Parameters.TODO_ID %>=<%= todo.getId() %>">todoを削除する</a>
<br>
</div>
動作確認
サーバーを立ち上げ、動作確認を行います。Todo一覧画面を開くと削除リンクが追加されています。
削除リンクを押すと、対象のTodoが削除されます。例として「update todo」の削除リンクを押してみます。
Todoを削除することができました!
次回予告
こちらの記事から始まったサーブレットを使ったTodo Webアプリの作成ですが、ついにCRUD操作を作り終えました。全記事読んでくれた方ありがとうございます。
今後はログイン機能、他人のTodoを閲覧できる。でも編集、削除はできないといった機能を追加してみようかと、検討しています。いつになるかは僕にもわかりません。
ご質問等あればこちらのTwitterアカウントまでお願いします。
おすすめの参考書