質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3430閲覧

サーブレットを使ったUPDATE文について

charger0726

総合スコア7

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/02/10 03:00

編集2020/02/12 00:47

前提・実現したいこと

Javaに関する質問です。
JDBCとJSPを使って学生の出席管理をするシステムを演習的に作成しています。
DBからArrayListでテーブルを取得し、チャックボックスにチェックが入った列のint型の「出欠」の数値を変更してUPDATEを実行したいのですが、ArrayList内の選択された部分のみが取得できません。

該当のソースコード

jsp

1<%@page import="java.util.*"%> 2<%@page import="java.sql.*"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 5<%@ page language="java" contentType="text/html; charset=UTF-8" 6 pageEncoding="UTF-8"%> 7<!DOCTYPE html> 8<html> 9<head> 10<meta charset="UTF-8"> 11<title>認欠処理システム</title> 12</head> 13<body> 14認欠に変更 15<form action="AuthAbUpdateMain" method="post"> 16 <table border="1"> 17 <tr> 18 <th>ID</th> 19 <th>教科クラスコード</th> 20 <th>コース</th> 21 <th>教員コード</th> 22 <th>学籍番号</th> 23 <th>日付</th> 24 <th>出欠</th> 25 </tr> 26 <c:forEach var="Absence" items="${absenceList}" varStatus="i"> 27 <tr> 28 <td><c:out value="${Absence.id}" /></td> 29 <td><c:out value="${Absence.classCode}" /></td> 30 <td><c:out value="${Absence.course}" /></td> 31 <td><c:out value="${Absence.teachCode}" /></td> 32 <td><c:out value="${Absence.studentNum}" /></td> 33 <td><c:out value="${Absence.date}" /></td> 34 <td><c:out value="${Absence.attendCheck}" /></td> 35 <td><input type="checkbox" name="check[]" value="i.index"></td> 36 </tr> 37 </c:forEach> 38 </table> 39 <input type="submit" value="変更"> 40</form> 41 (10 = 欠席) 42 43</body> 44</html> 45

AuthAbsenceUpdate

1package update; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.SQLException; 7 8public class AuthAbsenceUpdate { 9 //接続用変数 10 static final String URL = "jdbc:h2:tcp://localhost/~/test"; 11 static final String DRIVER = "org.h2.Driver"; 12 static final String USERNAME = "sa"; 13 static final String PASSWORD = "Pass"; 14 15 public static void main(String[] args) { 16 //接続処理 17 try{ 18 Class.forName(DRIVER); 19 try(Connection con = DriverManager.getConnection(URL,USERNAME,PASSWORD)){ 20 21 //UPDATE文の実行 22 String sql = "UPDATE 出席 SET 出欠 = 01 WHERE ID = ?"; 23 PreparedStatement pStmt = con.prepareStatement(sql); 24 pStmt.setInt(?, ?); 25 System.out.println("sql = "+sql); //出力確認用 26 27 //実行処理 28 int rs = pStmt.executeUpdate(); 29 } 30 } catch (SQLException e) { 31 e.printStackTrace(); 32 }catch(ClassNotFoundException e){ 33 System.out.println("ドライバに接続できません\n"); 34 } 35 } 36}

AuthAbUpdateMain

1 2package update; 3 4import java.io.IOException; 5import java.util.List; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14import kesseki.Absence; 15import kesseki.GetAbsenceListLogic; 16 17 18@WebServlet("/AuthAbUpdateMain") 19public class AuthAbUpdateMain extends HttpServlet { 20 /**********************************/ 21 /*** 欠席→認欠を処理するクラス ***/ 22 /**********************************/ 23 private static final long serialVersionUID = 1L; 24 25 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 26 27 GetAbsenceListLogic getAbsenceListLogic = new GetAbsenceListLogic(); 28 List<Absence> absenceList = getAbsenceListLogic.execute(); 29 request.setAttribute("absenceList", absenceList); 30 31 //フォワード 32 RequestDispatcher dispatcher = request.getRequestDispatcher("/UpdateMain.jsp"); 33 dispatcher.forward(request, response); 34 } 35 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 36 request.setCharacterEncoding("UTF-8"); 37 38 AuthAbsenceUpdate authAbsenceUpdate = new AuthAbsenceUpdate(); 39 GetAbsenceListLogic getAbsenceListLogic = new GetAbsenceListLogic(); 40 List<Absence> absenceList = getAbsenceListLogic.execute(); 41 request.setAttribute("absenceList", absenceList); 42 43 //フォワード 44 RequestDispatcher dispatcher = request.getRequestDispatcher("/UpdateMain.jsp"); 45 dispatcher.forward(request, response); 46 } 47}

試したこと

補足情報(FW/ツールのバージョンなど)

eclipse

追記

UpdateMain.jspで表示させているテーブルのチェックボックスにチェックを入れ、
「更新」ボタンを押すとAuthAbsenceUpdate.javaのSQL文を実行して「出欠」の値を01に変更する処理をしたいのですが、UPDATE文が実行されません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同項目チェックボックスの基本としてname[]のように配列にする必要があります。
でないと、HTML上でチェックされた最も下のものしか送信されません。ラジオボタンと同じになるわけですね。

投稿2020/02/10 03:26

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

charger0726

2020/02/12 00:18

ありがとうございます。 配列にしないといけないのですね。 このチャックボックスにチェックが付いた列だけSQLのUPDATEを反映させるということはできないのでしょうか?
m.ts10806

2020/02/12 00:28

可能か不可能かだと「可能」ですが、「何をどう使いたいか」によるのでは。 ひとまず質問のコードをマークダウンcode機能適用してください。
charger0726

2020/02/12 01:12

ありがとうございます。 質問を編集しました。 JSPのcheckbox内の配列の値をサーブレット側で取得してUPDATE用の変数に格納する処理をしたのですが、渡されていないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問