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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

1回答

1353閲覧

データベースからもらったデータをjspで表示したい

kokok

総合スコア145

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2019/09/05 05:20

html

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>ホーム</title> 8</head> 9<body> 10<form action="/webkensyu/Address" method="get"> 11<button type="submit" name="button1">住所一覧</button> 12</form> 13</body> 14</html>

java

1package servlet; 2 3import java.io.IOException; 4import java.util.ArrayList; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import dao.ADDR_DB; 14 15/** 16 * Servlet implementation class Address 17 */ 18@WebServlet("/Address") 19public class Address extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 /** 23 * @see HttpServlet#HttpServlet() 24 */ 25 public Address() { 26 super(); 27 // TODO Auto-generated constructor stub 28 } 29 30 /** 31 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 32 */ 33 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 34 // TODO Auto-generated method stub 35 //response.getWriter().append("Served at: ").append(request.getContextPath()); 36 37 request.setCharacterEncoding("UTF-8"); 38 ADDR_DB addrdb = new ADDR_DB(); 39 ArrayList<String> result = addrdb.getaddrss(); 40 ArrayList<String> post = addrdb.getpost(); 41 request.setAttribute("result", result); 42 request.setAttribute("post", post); 43 RequestDispatcher dispatcher = request.getRequestDispatcher("/address_view.jsp"); 44 dispatcher.forward(request, response); 45 } 46 47 /** 48 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 49 */ 50 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 51 // TODO Auto-generated method stub 52 doGet(request, response); 53 } 54 55} 56

java

1package dao; 2 3import java.sql.PreparedStatement; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6import java.util.ArrayList; 7 8public class ADDR_DB extends DBIO{ 9 10 public ADDR_DB(){ 11 connect(); 12 } 13 14 //郵便番号の取得 15 public ArrayList<String> getpost(){ 16 ArrayList<String> post = new ArrayList<String>(); 17 18 19try { 20 21 connect(); 22 23 String sql ="SELECT address_code FROM addresses"; 24 25 26 PreparedStatement pstmt = conn.prepareStatement(sql); 27 ResultSet rs = pstmt.executeQuery(); 28 29 while(rs.next()) { 30 ; 31 post.add(rs.getString("address_code")); 32 33 } 34 35 }catch(SQLException e){ 36 37 e.printStackTrace(); 38 39 }finally { 40 41 this.close(); 42 } 43 44 45 return post; 46 } 47 48 49 50 //住所一覧取得する 51 public ArrayList<String> getaddrss() { 52 ArrayList<String> result = new ArrayList<String>(); 53 54 try { 55 56 connect(); 57 58 String sql ="SELECT CONCAT(address_prefecture, address_city, address_street) AS address FROM addresses"; 59 60 61 PreparedStatement pstmt = conn.prepareStatement(sql); 62 ResultSet rs = pstmt.executeQuery(); 63 64 while(rs.next()) { 65 ; 66 result.add(rs.getString("address")); 67 68 } 69 70 }catch(SQLException e){ 71 72 e.printStackTrace(); 73 74 }finally { 75 76 this.close(); 77 } 78 return result; 79 } 80} 81

java

1 2package dao; 3 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9import java.util.ArrayList; 10 11public class DBIO { 12 13 protected static final String DBNAME = "jdbc:mysql://localhost:3306/webkensyu?useUnicode =true&characterEncoding=utf8"; 14 protected static final String DBUSER = "user"; 15 protected static final String DBPASS = "pass"; 16 protected Connection conn; 17 18 19 public DBIO(){ 20 this.connect(); 21} 22 23 public void connect() { 24 try { 25 26 Class.forName("com.mysql.jdbc.Driver"); 27 28 conn = DriverManager.getConnection(DBNAME,DBUSER,DBPASS); 29 30 31 } catch(SQLException e) { 32 33 e.printStackTrace(); 34 35 }catch(ClassNotFoundException e) { 36 37 e.printStackTrace(); 38 39 } 40 } 41 42 43 44 public void close() { 45 46 if(conn != null) { 47 try { 48 conn.close(); 49 }catch(SQLException e) { 50 e.printStackTrace(); 51 } 52 } 53 } 54} 55 56

html

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.ArrayList"%> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<title>住所一覧</title> 9</head> 10<body> 11<table border="1"style="border: 1px solid black; border-collapse: collapse;"> 12<%ArrayList<String> address = (ArrayList<String>) request.getAttribute("result");%> 13<%ArrayList<String> post = (ArrayList<String>) request.getAttribute("post");%> 14<%for(String addr : address){ %> 15<tr> 16<td> 17<%int i=0;%> 18<%=post[i]%> 19<%=addr%> 20<%i++;%> 21</td> 22</tr> 23<%}%> 24</table> 25</body> 26</html>

jspから住所取得ボタンが押されると  Address サーブレットで 郵便番号と住所を取得してそれをjspで表示したいと考えております。

しかし、なかなか上手く表示するができません。

上記のjspコードだと

<%=post[i]%>
この行で見つかった複数の注釈:
- 式の型は配列型で ArrayList<String> に解決済みのものである必要が
あります
で上記のエラーがでます。

sqlの結果は配列に格納しているつもりです。イメージ説明

画像のような感じで表示したいと考えております。(汚くてすみません)

初めは、郵便番号と住所を一緒にsqlで取得していたのですが、郵便番号

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

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

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

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

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

kokok

2019/09/05 05:30

すみません、もう少し自分で考えてみます。
m.ts10806

2019/09/05 05:32 編集

はい。あまりポンポン出し過ぎると(質問者的には熟考の上だとしても・・)連続してみている回答者も「あれ?さっきのは?」となりますし時に「アドバイスが無駄になった」と感じる人もいますので、ちょっと気にしてもらえたらと
kokok

2019/09/05 05:37

はい。質問するときは、相手の事を考えながらするように心がけます。 ありがとうございます。
m.ts10806

2019/09/05 05:39

怒ってるわけではないですし、「出直してこい」とか「質問するな」というわけではありません。せっかく得たアドバイスを活かしてもらいたいですし、活かすことで自己解決できることも増えてくるはずだからです。 「質問する時間が勿体ないな」と感じることができたら大きな成長にもなります。
kokok

2019/09/05 05:48

わざわざアドバイスを頂けているので、しっかり理解して活かして成長していきたいと思います ありがとうございます。頑張ります。
tetutetu

2019/09/05 05:49

昨日今日で既に3度ほど回答していますが 毎度毎度正直1行で回答できるような内容なので(今回のも見て数秒で原因は見つかりますし) 一度よく考えてみるといいと思います。
kokok

2019/09/05 05:51

何度も本世に申し訳ないです。 もっと、考えて質問するようにします。
guest

回答1

0

自己解決

Arraylistからの要素の取得はget(int index)でした。

--追記--
for文の中で<%int i=0;%>としていたのを
for文の前で <%int i=0;%> としました。

投稿2019/09/05 05:57

編集2019/09/05 06:13
kokok

総合スコア145

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

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

m.ts10806

2019/09/05 06:00

自分で気づけたということで+しました。 たぶん落ち着けば案外なんてことのないことだったりします。 最初は混乱するかと思いますが、エラーは単にNGを突っ返しているわけではなく、「こうしたらいいよ」「ここが悪いよ」と教えてくれているものです。 前の質問の回答でコメントしましたが、下記のような記事を読んてみてください。 https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5 >まず最初に頭に入れておくべきなのは, エラーメッセージは意味不明な暗号ではない ということだ
kokok

2019/09/05 06:05

ありがとうございます。 自分の中でエラーはよく分からないというイメージがあった気がします。しっかりエラーメッセージを読んで何がダメなのか理解できるようになり自分で解決できることを増やしていきたいと思います。
tetutetu

2019/09/05 06:06

ちなみに気になったので一点だけ 本当に配列に格納できているのであれば(今回はArrayListですが) 変数名[i];  i++;で回すことは出来ますが 今回の書き方ですと拡張for文の中で int i = 0;を宣言しているため for文の回る回数ぶん、変数名[0]を出力し続けることになります。 こういった凡ミスにも気付けるともっと良いですね。
tetutetu

2019/09/05 06:08

上記、当然ながらlist.get(i);でも同様の現象が起きます。
kokok

2019/09/05 06:10

解決のところに書き忘れていました。 for文の前で int i=0 としました。 ご指摘ありがとうございます。
m.ts10806

2019/09/05 06:10

回答に追記したほうが良いかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問