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

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

ただいまの
回答率

88.77%

An exception occurred processing JSP page

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 8,761

エラーが出てしまいます。
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>
/

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

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

BEFORE

SELECT book.book_no,book.book_name,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

AFTER

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


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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/21 15:54

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

    キャンセル

  • 2016/06/21 16:02

    https://dev.mysql.com/doc/refman/5.6/ja/control-flow-functions.html
    ここにIFの使い方が書いてあります。IFは第一引数がTRUEの時第二引数を、FALSEの時第三引数を返す関数です。
    あなたのやりたいことは「この列に表示すべきメモ」を出したいんですよね?多分それで大丈夫だと思います。

    キャンセル

  • 2016/06/21 16:12

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

    キャンセル

  • 2016/06/22 11:58

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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