竹形誠司 ブログ
ご質問    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
経費精算・確認画面で保存を押すと例外が発生
by 大原龍彦[oohara]
HTTPステータス 500 - An exception occurred processing JSP page /expense/Save.jsp at line 47
type 例外レポート
メッセージ An exception occurred processing JSP page /expense/Save.jsp at line 47
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: An exception occurred processing JSP page /expense/Save.jsp at line 47
44: mExpense.setTotal(mTotal);
45: mExpense.setMemo(request.getParameter("pMemo"));
46: mExpense.setEditSeq(Integer.parseInt(request.getParameter("pEditSeq")));
47: mExpense.save();
48: if(mExpense.getStatus()==Expense.STATUS_REMANDED
49:  && mExpense.getUserId()==sUser.getId()){
50:     mExpense.changeStatus(Expense.STATUS_HOLD);
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: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cDescription' in 'field list'
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:908)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:837)
    org.apache.jsp.expense.Save_jsp._jspService(Save_jsp.java:341)
    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)

【問題点】この例外を調べたところ
C:\JspPdf\SampleApp\JSP\WEB-INF\classes\Expense.javaに
bExpenseItem.fDescription = mRs.getString("cDescription");
という箇所があります。
しかし、C:\JspPdf\SampleApp\SQL\sample_app.sqlの
CREATE TABLE tExpenseItem(
    cId INT AUTO_INCREMENT PRIMARY KEY,
    cExpenseId INT,
    cDate BIGINT,
    cCategory INT,
    cItem VARCHAR(255),
    cAmount INT
);
には"cDescription"というフィールドは定義されていません。
これが例外発生の原因のようですがどのように対処したらよろしいでしょうか?
他のソースにも"cDescription"が使われていますので1か所ではないようです。
お忙しいところどうそよろしくお願いいたします。

投稿:大原龍彦[oohara]/2015年 04月 01日 18時 37分 /更新:2015年 04月 01日 18時 39分
RE:経費精算・確認画面で保存を押すと例外が発生
by 竹形 誠司[takegata]
竹形です、こんにちは。
CD-ROMのコードを調べてみまた所、ご指摘の通り、cDescriptionの定義が抜けていますね、すみません。

mysqlにログインして USE dSampleApp でdSampleAppを選び、次のSQL文を入力してみてください。
ALTER TABLE tExpenseItem add cDescription varchar(255);
次のSQL文でテーブルの定義を見ることができます。
show create table tExpenseItem;
次のようになっていればOKです。
| tExpenseItem | CREATE TABLE `texpenseitem` (
  `cId` int(11) NOT NULL AUTO_INCREMENT,
  `cExpenseId` int(11) DEFAULT NULL,
  `cDate` bigint(20) DEFAULT NULL,
  `cCategory` int(11) DEFAULT NULL,
  `cItem` varchar(255) DEFAULT NULL,
  `cAmount` int(11) DEFAULT NULL,
  `cDescription` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`cId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
ご指摘ありがとうございました。
正誤表に反映致します。

投稿:竹形 誠司[takegata]/2015年 04月 01日 19時 08分 /更新:2015年 04月 01日 19時 08分