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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

554閲覧

選択したデータを抽出表示する方法

userY

総合スコア44

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2022/03/19 12:18

編集2022/03/21 05:32

初学者です。よろしくお願いいたします。

jsp画面で一覧表示したListから、form post送信でデータを選択したものを dao sqlで抽出したいのですが、サーブレットで取得したidパラメータが0になってしまい、抽出表示画面ではデータがnullとなります。


質問に対する追記・変更

変更:一覧表示jsp form のname="id"と訂正し、servletでidをInteger.parseIntに戻しました。

id=5と数字が入るようになりました。ご指摘ありがとうございました。

次に、以下のような警告が出ました。

org.postgresql.util.PSQLException: 適切な位置にいない ResultSetです。おそらく、nextを呼ぶ必要があります。

変更:エラーメッセージが rs.next();の行を示していたので、if(rs.next()){ }と書き換えました。

警告は消えましたが、抽出したいデータ cName,address,tel_numberはnullのままです。

基礎が甘く、多方面で調べたコードを参考にしており、統一性がなく読みづらいコードで申し訳ありません。


java
eclipse
postgresql
tomcat


jsp

--- <%List<Customer>customerList=(List<Customer>)session.getAttribute("customerList"); %> --- <%for(Customer cs : customerList){ %> <form action="/Sukkiri/ShowServlet" method="post"> <td><input type="submit" **name=" id"** value="<%=cs.getId()%>"></td> </form> --

dao

public Customer select_customer(int myId) { Customer customer=new Customer(); try { Class.forName("org.postgresql.Driver"); } catch (Exception e) { e.printStackTrace(); } //データベース接続 try (Connection conn = DriverManager.getConnection(JDBC_URL,DB_USER,DB_PASS)){ //SELECT文の準備 String sql= "SELECT * FROM CUSTOMER WHERE ID=?"; PreparedStatement pStmt= conn.prepareStatement(sql); conn.setAutoCommit(false); pStmt.setInt(1, myId); //SELECT文を実行 ResultSet rs=pStmt.executeQuery(); //SELECT文の結果をcustomerに格納 **if(rs.next());{** int id=myId; String cName=rs.getString("cName"); String address=rs.getString("address"); String tel_number=rs.getString("tel_number"); customer = new Customer(id,cName,address,tel_number); **}** }catch(SQLException e){ e.printStackTrace(); } return customer; }

servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); int id=0; Customer customer=new Customer(); UpdateDao dao = new UpdateDao(); Customer oneCustomer =dao.select_customer(id); **id=Integer.parseInt(request.getParameter("id"));**       String cName =request.getParameter("cName"); String address=request.getParameter("address"); String tel_number=request.getParameter("tel_number"); System.out.println(id+cName+address+tel_number); ** //ここで出力結果が(5 null null null)になります。** request.setAttribute("oneCustomer", oneCustomer); RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/show.jsp"); dispatcher.forward(request, response); }

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import ="java.util.List" %> <% //request scope data Customer oneCustomer =(Customer)request.getAttribute("oneCustomer"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>顧客詳細</title> </head> <body> <div class="mx-auto" style="width:300px"> <h1 class = "mb-3" style="text-align:center">顧客詳細</h1> <form action="/Sukkiri/UpdateServlet" method="post"> <div class="mb-3"> <%=oneCustomer.getId() %> <label for="customercName" class="form-label">お客様名</label> <input type="text" class="form-control" id="cName" name="cName" placeholder=<%=oneCustomer.getCname() %>> </div> <div class="mb-3"> <label for="customerAddress" class="form-label">住所</label> <input type="text" class="form-control" id="address" name="address" placeholder=<%= oneCustomer.getAddress()%>> </div> <div class="mb-3"> <label for="customerTel" class="form-label">電話番号</label> <input type="text" class="form-control" id="tel_number" name="tel_number" placeholder=<%=oneCustomer.getTel_number()%>> </div> <a href='UpdateServlet?id=<%=oneCustomer.getId()%>'>編集する</a> <a href='DestroyServlet?id=<%=oneCustomer.getId()%>'>削除する</a> </form> <a href='ShowServlet?id=<%=oneCustomer.getId()%>'>CANCEL</a> <div style="text-align:center;"> </div> </div> <a href="/Sukkiri/ListServlet"/>顧客管理一覧</a> </body> </html>

例外
servletにてInteger.parseInt使用時に出たエラー

TTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ Cannot parse null string 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 java.lang.NumberFormatException: Cannot parse null string java.base/java.lang.Integer.parseInt(Integer.java:630) java.base/java.lang.Integer.parseInt(Integer.java:786) servlet.ShowServlet.doPost(ShowServlet.java:48) javax.servlet.http.HttpServlet.service(HttpServlet.java:681) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 注意 原因のすべてのスタックトレースは、サーバのログに記録されています

model

package model; public class Customer { private int id; private String cName; private String address; private String tel_number; public Customer() {} public Customer(String cName,String address,String tel_number) { this.cName=cName; this.address=address; this.tel_number=tel_number;} public Customer(int id,String cName,String address,String tel_number) { this.id=id; this.cName=cName; this.address=address; this.tel_number=tel_number; } public int getId() {return id;} public void setId(int id) {this.id =id;} public String getCname() {return cName;} public void setCname(String cName) {this.cName = cName;} public String getAddress() {return address;} public void setAddress(String address) {this.address = address;} public String getTel_number() {return tel_number;} public void setTel_number(String tel_number) {this.tel_number = tel_number;} }

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

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

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

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

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

jimbe

2022/03/20 19:40

「jsp画面で一覧表示したList」の何処に name="id" という input がありますか。
jimbe

2022/03/21 08:42

データベースにデータはありますか。 このプログラム以外の方法で該当 SQL を実行すればデータが取得できますか。 列名等は合っていますか。 表示したデータは”何を表示している”のでしょう。"何を表示したかった"のでしょうか。 データの取得から表示までの間にどこを通っており、どこまでは値があってどこで変わって(?)しまっているのでしょうか。 ご質問されるまえに確認すべきことはあります。 作ることだけに留まらず、デバッグにも「多方面で調べた」力量を用いてください。
guest

回答1

0

自己解決

servletからdaoへ選択したidの情報が送られていなかったことが原因で、
servletでmyId=idとしたら抽出表示できるようになりました。

今後はログやデバッグについても勉強していきたいと思います。
ご指摘、ご閲覧ありがとうございました。

投稿2022/03/22 23:13

userY

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問