【Java: Todoアプリ】編集したTodoをデータベースに登録する

今回の記事はこちらの記事の続きとなっております。

現在Java(サーブレット・jsp) x PostgreSQLを使ってTodoアプリを作成しています。現時点での機能は次のとおりです。

前回まででTodoの一覧から編集したいTodoを選択するとその情報が入力された状態のページまで遷移することができました。今回の記事ではTodoを編集して、データベースの情報を更新するところを実装していきます。具体的には以下のような処理を追加します。

  • 編集が終了し、「Todoを更新する」を押すとデータベースに編集内容が反映される
  • 一覧表示するとTodoの内容が更新されている

その他の機能はこちらにまとめています。

ご質問等あればこちらのTwitterアカウントまでお願いします。

Java x MySQLでWebアプリの作り方が学べるUdemy講座

UpdateDAOの編集

まずはUpdateDAOにメソッドを追加します。追加するメソッドはid, todoの内容, 期限を受け取りデータベースの値を更新するメソッドを作成します。全体は以下の通りです。

/**
 * Todoデータを更新する
 * @param id
 * @param todo
 * @param timeLimit
 * @return 更新行数
 * @throws SQLException
 * @throws ClassNotFoundException
 */
public int updateTodo(int id, String todo, Date timeLimit) throws SQLException, ClassNotFoundException {
	// 変更した行数を返却するための変数
	int processingNumber = 0;

	// SQLを作成
	StringBuilder sql = new StringBuilder();
	sql.append(" UPDATE ");
	sql.append("    todo ");
	sql.append(" SET ");
	sql.append("    todo = ? ");
	sql.append(",   timeLimit = ? ");
	sql.append(" WHERE ");
	sql.append("    id = ? ");

	try(Connection con = DBConnection.getConnection();
			PreparedStatement pstmt = con.prepareStatement(sql.toString())) {
		// パラメータに値を設定する
		pstmt.setString(1, todo);
		pstmt.setDate(2, timeLimit);
		pstmt.setInt(3, id);

		// SQLを実行し、実行行数を受け取る
		processingNumber = pstmt.executeUpdate();
	}
	return processingNumber;
}

まずSQLの構築をしています。今回は普通のString型ではなく、StringBuilderを使用しました。理由はちょっと長いSQLだったので、Stringだと見にくいかなと思ったからです。

StringBuilderを使用している以外は特筆すべき点はありません。SQLの内容としてはtodoテーブルのidが一致したデータを更新するという具合です。

// SQLを作成
StringBuilder sql = new StringBuilder();
sql.append(" UPDATE ");
sql.append("    todo ");
sql.append(" SET ");	
sql.append("    todo = ? ");
sql.append(",   timeLimit = ? ");
sql.append(" WHERE ");
sql.append("    id = ? ");

次にSQL実行部分です。こちらも今までとほとんど変わりません。setString, setDate, setIntでそれぞれSQLに具体的な値を設定しています。

try(Connection con = DBConnection.getConnection();
		PreparedStatement pstmt = con.prepareStatement(sql.toString())) {
	// パラメータに値を設定する
	pstmt.setString(1, todo);
	pstmt.setDate(2, timeLimit);
	pstmt.setInt(3, id);

	// SQLを実行し、実行行数を受け取る
	processingNumber = pstmt.executeUpdate();
}

 

UpdateServletの編集

次にUpdateServletの編集をしていきます。update.jspからPOSTメソッドを使ってフォームが送信されてくるのでdoPostメソッドを作成し、データベースの更新を行います。doPostは以下のようになります。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// リクエストパラメータから値を取得する
	request.setCharacterEncoding("UTF-8");
	int id = Integer.parseInt(request.getParameter(Parameters.TODO_ID));
	String todo = request.getParameter(Parameters.TODO);
	Date timeLimit = Date.valueOf(request.getParameter(Parameters.TIME_LIMIT));

	// DAOを生成し、Todoを更新する
	UpdateDAO dao = new UpdateDAO();
	try {
		// 受け取ったパラメータを元にデータベースを更新する
		dao.updateTodo(id, todo, timeLimit);
	} catch(SQLException | ClassNotFoundException e) {
		e.printStackTrace();
	}

	response.sendRedirect("list-servlet");
}

まずは送られてきたリクエストパラメータを受け取ります。

// リクエストパラメータから値を取得する
request.setCharacterEncoding("UTF-8");
int id = Integer.parseInt(request.getParameter(Parameters.TODO_ID));
String todo = request.getParameter(Parameters.TODO);
Date timeLimit = Date.valueOf(request.getParameter(Parameters.TIME_LIMIT));

次に先ほど編集したUpdateDAOを使ってデータベースのデータを受け取ったリクエストパラメータで更新します。

// DAOを生成し、Todoを更新する
UpdateDAO dao = new UpdateDAO();
try {
	// 受け取ったパラメータを元にデータベースを更新する
	dao.updateTodo(id, todo, timeLimit);
} catch(SQLException | ClassNotFoundException e) {
	e.printStackTrace();
}

 

動作確認

では動作確認をしてみましょう。サーバーを立ち上げ一覧画面を表示します。「todoを更新する」リンクを押してみます。今回は「create todo app」「2021-06-30」のTodoのリンクを押してみます。

リンクを押すとTodoの編集画面が表示されます。この編集画面では既存のデータがすでに入力されています。

試しに「create todo app」を「update todo app」に変更し、期限を「2021/06/30」から「2021/10/14」とします。

「Todoを更新する」ボタンを押すと一覧画面に遷移し、Todoが更新されていることが確認できます。

次回予告

今回でTodoの編集が完了しました。これでTodoの一覧表示・新規登録・編集を行えるようになりました。最後は削除を行えるようにします。

ご質問等あればこちらのTwitterアカウントまでお願いします。

私はプログラミング学習はUdemyで行うのが以下のような理由で圧倒的におすすめです。

  • 動画で好きなときに学べる
  • 一流のエンジニアから教えてもらえる
  • 好きな技術を体系的に学べる
  • 実際に手を動かしながら学ぶことができる
  • セール時であれば1500円〜2000円ほどで購入できる(大半の技術書より安い)
  • 講座自体がアップデートされていくので情報が古くなりにくい

UdemyにはJava x MySQLでWebアプリの作り方が学べるUdemy講座 もあるので興味がある方は一度チェックしてみてください!なおUdemyは頻繁にセールをやっているので、セール時を狙って購入してください!

おすすめの参考書

コメント

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