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

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

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

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

Q&A

解決済

2回答

15813閲覧

An exception occurred processing JSP page

l_l_l_l_l_l_l_l

総合スコア38

JSP

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

0グッド

0クリップ

投稿2016/06/21 06:29

編集2016/06/21 07:10

エラーが出てしまいます。
130行目のnoteがnullだからでしょうか?
ご指摘お願い致します。
###エラーメッセージ

HTTPステータス 500 - An exception occurred processing JSP page /book_kanri.jsp at line 130 type 例外レポート メッセージ An exception occurred processing JSP page /book_kanri.jsp at line 130 説明 The server encountered an internal error that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: An exception occurred processing JSP page /book_kanri.jsp at line 130 127: </form></td> 128: <td> 129: <% 130: String memo = gs.getString("note"); 131: if (memo == null || memo.equals("")) { 132: memo = "-"; 133: } Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:454) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 原因 javax.servlet.ServletException: java.sql.SQLException: Before start of result set org.apache.jsp.book_005fkanri_jsp._jspService(book_005fkanri_jsp.java:321) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:431) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 原因 java.sql.SQLException: Before start of result set com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:790) com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5240) com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5163) com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5202) org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet.getString(DelegatingResultSet.java:266) org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet.getString(DelegatingResultSet.java:266) org.apache.jsp.book_005fkanri_jsp._jspService(book_005fkanri_jsp.java:274) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:431) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 注意 原因のすべてのスタックトレースは、Apache Tomcat/8.0.20のログに記録されています -------------------------------------------------------------------------------- Apache Tomcat/8.0.20

###JSP(追記)

<%@ page contentType="text/html; charset=UTF-8" import="java.sql.*,javax.naming.*,javax.sql.*,java.text.*,java.util.Date,java.util.Calendar"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> <html> <sql:setDataSource var="db" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/Library" user="root" password="" /> <sql:query var="rs" dataSource="${db}"> SELECT book.book_no,book.book_name,IF(book.note="" OR book.note IS NULL,"-", book.note),genre.genre_name, lend.lend_date,book.state FROM book LEFT JOIN lend ON book.book_no = lend.book_no LEFT JOIN user ON user.user_no = lend.user_no LEFT JOIN genre ON book.genre_no = genre.genre_no where book.delete_flg = 0 <c:if test="${!empty param['genreNo']}"> and book.genre_no = ? <sql:param value="${param['genreNo']}" /> </c:if> ORDER BY book.book_no; </sql:query> <sql:query var="rs1" dataSource="${db}"> select * from genre </sql:query> <sql:query var="rs2" dataSource="${db}"> select book.book_no from book </sql:query> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <link rel="stylesheet" type="text/css" href="css/Library.css"> <meta content="text/html; charset=UTF-8"> <title>書籍管理画面</title> </head> <body> <h2>書籍管理画面</h2> <br> <form method="POST" action="book_kanri.jsp"> <% Connection con = null; PreparedStatement ps = null; String sql = null; ResultSet gs = null; try { Context initContext = new InitialContext(); DataSource ds = (DataSource) initContext .lookup("java:comp/env/jdbc/Library"); con = ds.getConnection(); sql = "SELECT * FROM book where book.delete_flg = 0"; ps = con.prepareStatement(sql); gs = ps.executeQuery(); %> <br> <form method="POST" action="book_kanri.jsp"> <p> ジャンル <select name="genreNo"> <option value="">全て</option> <c:forEach var="row" items="${rs1.rows}"> <option value=${row.genre_no}>${row.genre_name}</option> </c:forEach> </select> </p> <INPUT style="color: white; background-color: D57200;" type="submit" value="絞り込む" /> </form> <br> <br> <form method="POST" action="book_memo"> <p> 書籍ID <select name="book_no"> <c:forEach var="row" items="${rs2.rows}"> <option>${row.book_no}</option> </c:forEach> </select> </p> <div> 備考<input type="text" name="note" /> </div> <br> <INPUT style="color: white; background-color: D57200;" type="submit" value="登録" /> </form> <br> <table class="tbl_01" border="1"> <tr> <th>書籍ID</th> <th>書籍名</th> <th>ジャンル</th> <th>貸出</th> <th>貸出変更</th> <th>削除</th> <th>備考(メモ)</th> </tr> <c:forEach var="row" items="${rs.rows}"> <tr> <td>${row.book_no}</td> <td>${row.book_name}</td> <td>${row.genre_name}</td> <td><c:if test="${row.state == 1}">○</c:if> <c:if test="${row.state != 1}">×</c:if></td> <c:if test="${row.state == 1}"> <td><form method="POST" action="kano"> <input type="hidden" name="id" value=${row.book_no}> <button class="button" type="submit">不可へ</button> </form></td> </c:if> <c:if test="${row.state != 1}"> <td><form method="POST" action="huka"> <input type="hidden" name="id" value=${row.book_no}> <button class="button" type="submit">可能へ</button> </form></td> </c:if> <td><form method="POST" action="delete_book"> <input type="hidden" name="user_edit" value=${row.book_no}> <button class="button" type="submit">削除</button> </form></td> <td>${row.note}</td> </tr> </c:forEach> </table> <br> <form action="kanri_mypage.jsp"> <input style="color: white; background-color: D57200;" type="submit" name="mypage" value="TOPページ"> </form> <form action="book_resurrection.jsp"> <input style="color: white; background-color: D57200;" type="submit" name="reset2" value="削除済書籍編集"> </form> <c:if test="${!empty requestScope['errorMessage']}"> <div>${requestScope['errorMessage']}</div> </c:if> <% } catch (Exception e) { throw new ServletException(e); } finally { try { if (gs != null) { gs.close(); } if (ps != null) { ps.close(); } if (con != null) { con.close(); } } catch (Exception e) { } } %> </body> </html> /

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

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

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

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

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

guest

回答2

0

String memo = "";
if(gs.next()) {
memo = gs.getString("note");
}

としてみたらどうでしょう。
ResultSetは開始位置がスタート位置にいないのでシフトさせてあげる必要があります。
(※複数行の場合はwhileでループ)

投稿2016/06/21 06:49

mty.ad

総合スコア145

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

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

0

ベストアンサー

なぜこのタイミングでgsを参照しているのでしょうか?他のデータはrowから取っているのに…
gsはexecuteQueryのあと一度もnextを呼んでいないためにそのエラーがでています。
しかし、そもそもこのタイミングでgsを使う事自体、あなたの意図した動作にならないと思います。
もしrow.noteがNULLが表示されて困るのであれば、SELECT文を工夫すべきかと思います。

###BEFORE

SQL

1 SELECT book.book_no,book.book_name,book.note,genre.genre_name, 2 lend.lend_date,book.state FROM book LEFT JOIN lend ON book.book_no = lend.book_no LEFT JOIN 3 user ON user.user_no = lend.user_no LEFT JOIN genre ON book.genre_no = genre.genre_no where book.delete_flg = 0

###AFTER

SQL

1 SELECT book.book_no,book.book_name,IF(book.note="" OR book.note IS NULL,"-", book.note),genre.genre_name, 2 lend.lend_date,book.state FROM book LEFT JOIN lend ON book.book_no = lend.book_no LEFT JOIN 3 user ON user.user_no = lend.user_no LEFT JOIN genre ON book.genre_no = genre.genre_no where book.delete_flg = 0

IF(book.note="" OR book.note IS NULL,"-", book.note)
この記述で、noteが空白、またはNULLだったときハイフンに置き換え、そうでなければそのままnoteの値を返すようになります。こうしてSELECT文を工夫すればわざわざjavaコードでifで調べずとも表示をハイフンに置き換えられます。

投稿2016/06/21 06:45

masaya_ohashi

総合スコア9210

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

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

l_l_l_l_l_l_l_l

2016/06/21 06:54

SQLにIF文を入れる発想はありませんでした。 表示は<td>${row.note}</td>で大丈夫ですか?
l_l_l_l_l_l_l_l

2016/06/21 07:12

URLまで有難う御座います! <td>${row.note}</td>で表示させようとしましたが なにも表示されませんでした。SOLなどでまだ抜けている部分がるんですかね。。 ちなみに質問のJSPは追記いたしました。
masaya_ohashi

2016/06/22 02:58

すいません、コメントに気付かなかったです。別質問で解決できたようですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問