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

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

ただいまの
回答率

88.80%

JSPでDBのデータを表示させたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 7,339

cjapan36

score 14

DBからテーブルを引っ張ってきて、Javaのほうで出力させたい(全件検索)のですが、
表の中身を表示させることが出来ません。
エラー等はコンソールの方にも表示されておりません。誤字等のケアレスミスであれば非常に申し訳ないのですが、お手上げ状態なので、ご教授いただけますでしょうか。

また、書籍名の検索ボタンとジャンル名との間にスペースを入れる方法も併せて教えていただけると幸いです。cssのほうで編集はしたのですが、かわらずです。
現在の表記の仕方ではスペースが入らなかったので、間違っているということでしょうから、正しい表記の仕方をお教えいただけませんでしょうか。

該当のソースコード

package jp.co.sss.book.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import jp.co.sss.book.bean.Book;

public class BookDAO {
    public static Book findByUserIDAndPassword(String bookId) {

        Connection con = null;

        PreparedStatement ps = null;
        Book book = null;
        try {
            con = DBManager.getConnection();
            ps = con.prepareStatement("SELECT * FROM book WHERE book_id = ?");
            ps.setString(1, bookId);

        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            book = new Book();
            book.setBookId(rs.getInt("book_id"));
            book.setBookName(rs.getString("book_name"));
            book.setAuthor(rs.getString("author"));
            book.setPublicatoindate(rs.getDate("publicatoin_date"));
            book.setStock(rs.getInt("stock"));
            book.setGenreId(rs.getInt("genre_id"));
        }
    } catch (SQLException e) {
    e.printStackTrace();
   }finally{
        DBManager.close(ps, con);
    }
        return book;
}
}
<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="css/style.css" rel="stylesheet" type="text/css" />
<title>書籍一覧</title>
</head>
<body>
  <%@include file="../header.jsp"%>
  <div id="main"></div>
  <p>書籍一覧画面</p>
  <span class="mgr">書籍名:<input type="text" name="BookName"><input id="sbtn5" type="submit" value="検索"></span>
 ジャンル名:<select name="genre">
 <option value="1">文学</option>
 <option value="2">経済</option>
 <option value="3">技術</option>
 <input type="submit" value="検索"><br/>
  </select><br/>
  <table border="1">
  <tr>
      <th>書籍ID</th>
      <th>書籍名</th>
      <th>著者</th>
      <th>発行日</th>
      <th>在庫</th>
      <th>ジャンル名</th>
  </tr>
  <c:forEach var="book" items="${book}">
  <tr>
    <th>${book.bookId }</th>
    <th>${book.bookName}</th>
    <th>${book.author}</th>
    <th>${book.publicatoindate }</th>
    <th>${book.stock}</th>
    <th>${book.genreId}</th>
 </tr>
 </c:forEach>
</table>
  <%@ include file="../footer.jsp"%>
</body>
</html>
package jp.co.sss.book.bean;

import java.util.Date;

public class Book {

    private int bookId;
    private String bookName;
    private String author;
    private Date publicatoindate;
    private int stock;
    private int genreId;

    public int getBookId() {
        return bookId;
    }
    public void setBookId(int bookId) {
        this.bookId = bookId;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public Date getPublicatoindate() {
        return publicatoindate;
    }
    public void setPublicatoindate(Date publicatoindate) {
        this.publicatoindate = publicatoindate;
    }
    public int getStock() {
        return stock;
    }
    public void setStock(int stock) {
        this.stock = stock;
    }
    public int getGenreId() {
        return genreId;
    }
    public void setGenreId(int genreId) {
        this.genreId = genreId;
    }
    }


よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • cjapan36

    2019/05/27 21:43

    ありがとうございます。
    ちなみに具体的にはどういったコードを記入すれば解決するでしょうか?
    A-pZさんの回答にあるような形でしょうか?

    キャンセル

  • m.ts10806

    2019/05/27 22:56

    BookDAOをnewしてfindByUserIDAndPassword()を呼び出す処理をどこかに追加。(もちろんメソッド名の正規化は必要)
    サーブレットに追加するならsetAttributeする必要があるし、jsp側に書くこともできないことはないけど結局同等の処理は必要。

    キャンセル

  • cjapan36

    2019/05/28 10:44

    サーブレットにListを追加してjspの方も修正したことで無事出力させることが出来ました。
    ありがとうございました。

    キャンセル

回答 1

checkベストアンサー

+1

<c:forEach var="book" items="${book}">

と、items属性に、java.util.Listなど複数要素を格納するクラスを指定していますが、DAOを見る限りでは、単一のBookを返していますので、このJSPを表示する手前のサーブレットで、

List<Book> book = new ArrayList<>();
book.add( dao.findByUserIDAndPassword(.....));
request.setAttribute("book", book);

Listなどに格納しなければ表示されません。

ちなみにdaoのメソッド名が実際の処理内容とあっていないようです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/27 17:48

    回答いただきありがとうございます。
    Listに格納して表示させなければならなかったのですね。
    上記にもありますように、findByUserIDAndPassword()はミスでした。
    全件検索したいので、findAllでよろしいのでしょうか?

    キャンセル

  • 2019/05/28 10:52

    メソッド名を変更し、Listを追加してjspを修正したところ無事出力完了しました。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る