Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

サーブレットでSQLの中身をArraylistに格納ができません。

解決したいこと

プログラミング初心者です。
サーブレットでSQLの中をArraylistに格納したいのですが格納されません。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {

	// データベースに接続するための情報
	String url = "jdbc:mysql://localhost:3306/booklist";
	String user = "user";
	String password = "pass";
		
	// 本のタイトルを格納するList
	List<String> books = new ArrayList<>();
	System.out.println(books);
		
	// データベースに接続する
	try {
		Class.forName("com.mysql.cj.jdbc.Driver");

		try (Connection con = DriverManager.getConnection(url, user, password);
				Statement st = con.createStatement();) {

			// SQLを実行して、テーブルから本のタイトルを取得する
			ResultSet res = st.executeQuery("SELECT title FROM books_list");
			System.out.println(res);

			// 取得した件数分繰り返す
			while(res.next()) {
				System.out.println(res.next());
				// リストに本のタイトルを追加
				books.add(res.getString("title"));
				System.out.println(books);
				
			}
		
		} catch(SQLException e) {
			e.printStackTrace();
		}
	} catch(ClassNotFoundException e) {
		e.printStackTrace();
	}
		
	// リクエストスコープへオブジェクト設定する
	request.setAttribute("books", books);
	
	// 次の画面に遷移
	request.getRequestDispatcher("/WEB-INF/jsp/books_list.jsp").forward(request, response);
}

Arraylistに格納したtitleを表示するjsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>本の名前</title>
</head>
<body>
	<% List<String> books = (List<String>)request.getAttribute("books"); %>
	
	<p>本のタイトル一覧</p>
	<% for(String title: books) { %>
		<%= title %><br>
	<% } %>
</body>
</html>


エラー表示は出ていません。
ただ、System.out.println(books);で確認すると[]しか表示されないのでデータを受け取れてないかもしれません。




### 自分で試したこと
SQLの接続が悪い子もと思い試してみましたが接続はできているのでArraylistだとは思うのですが....
0 likes

1Answer

System.out.println(books);で確認すると[]しか表示されない

// 本のタイトルを格納するList
List<String> books = new ArrayList<>();
System.out.println(books);

の出力ではないですか?
whileの中の出力箇所と識別できるようにSystem.out.println("Added: " + books);などのようにサフィックスを付けるなどして確認してみてください。

ちなみにSystem.out.println(rs.next());で次のレコードに進んでしまっています。

1Like

Comments

  1. @sasapan_1227

    Questioner

    ありがとうございます!

    早速試して確認してみます!

Your answer might help someone💌