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

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

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

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

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
Java+MySQL+Tomcatで作る掲示板とブログP72〜75
by kyo[nym0537]
こんにちは、初めまして。
自作の掲示板を作ろうとしてる大学生です。

さっそく質問なのですが、P72〜75のpasswordカラムと入力欄の追加という節のwrite_2.jspの網掛けの部分を追記したところエラーが起こるようになってしまいました。

開発環境がeclipseのせいなのかわかりませんが以下のようなエラーが出ました。

MySQL上でpasswordのテーブルも作ってあります。
INSERT INTO bbs (date_time,author,subject,body,password)にしてパスワードに書き込めるようにもしています。

JAVA初心者なので稚拙な質問で申し訳ありませんが、どうかご指導のほどよろしくお願い致します。




type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

org.apache.jasper.JasperException: An exception occurred processing JSP page /write_2.jsp at line 27

24:             + TextConv.beforeSql(strSubject) + "','"
25:             + TextConv.beforeSql(strBody) + "',"
26:             + "password('" + TextConv.beforeSql(strPassword) + "') )";
27: stmt.executeUpdate(strSql);
28: conn.close();
29: Cookie coo = new Cookie("auther",java.net.URLEncoder.encode(strAuthor,"Windows-31J"));
30: coo.setMaxAge(60*60*24*30);


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


原因

javax.servlet.ServletException: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'password' at row 1
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    org.apache.jsp.write_005f2_jsp._jspService(write_005f2_jsp.java:100)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


原因

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'password' at row 1
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2983)
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
    com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
    com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)
    org.apache.jsp.write_005f2_jsp._jspService(write_005f2_jsp.java:83)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


投稿:kyo[nym0537]/2009年 01月 26日 17時 04分 /更新:2009年 01月 26日 17時 05分
RE:Java+MySQL+Tomcatで作る掲示板とブログP72〜75
by 竹形 誠司[takegata]
竹形です。こんにちは。

エラーの原因は
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'password' at row 1
を見ると分かるのですが、エラーメッセージでは「passwordカラムのデータが長すぎる」と言っています。恐らく原因は、本書で扱っているMySQLより新しいバージョンを使っているためではないかと思います。

MySQLでは、password関数で文字列をハッシュ値に変換しますが、本書で扱っているバージョンでは、変換後のハッシュ値が16文字だったのが、最近のバージョンでは41文字になっています。本書のp70では
alter table bbs add password varchar(20);
を実行していますが、新しいバージョンのMySQLを使用する場合はvarcharの文字数指定を41以上にする必要があるわけです。次のようなSQL文でこのカラムの文字数を修正できます。
alter table bbs modify password varchar(41);
これでうまくいかなければ、また質問してください。
投稿:竹形 誠司[takegata]/2009年 01月 26日 18時 39分 /更新:2009年 01月 26日 18時 42分
RE:Java+MySQL+Tomcatで作る掲示板とブログP72〜75
by kyo[nym0537]
上記の方法を取ったところ無事解決しました、感謝いたします。

説明までして下さりとても勉強になりました。
また自力で調べても分からなくなった時は来させて頂きます。
では失礼します。
投稿:kyo[nym0537]/2009年 01月 26日 19時 43分 /更新:2009年 01月 26日 19時 43分
RE:Java+MySQL+Tomcatで作る掲示板とブログP72〜75
by 竹形 誠司[takegata]
学生さんに読んでいただけるのはとても嬉しいです。いつでも質問してください。
ただ、この本は少し内容が古いので、新しい情報も参考にしてくださいね。
たとえば、本書では、SQL文を実行する際にStatementクラスを使っていますが、その後のバージョンで使えるようになったPreparedStatementクラスの方がお勧めです。

PreparedStatementの使い方については、その後に上梓した「Java+MySQL+Tomcatで始めるWebアプリケーション構築入門」のP.188あたりに書きました。近いうちに要所を本ブログにもまとめたいと思っています。

#そろそろ改定が必要ですね。がんばります。
投稿:竹形 誠司[takegata]/2009年 01月 26日 23時 22分 /更新:2009年 01月 26日 23時 30分
RE:Java+MySQL+Tomcatで作る掲示板とブログP72〜75
by 竹形 誠司[takegata]
Java+MySQL+Tomcatのコーナーに「SQLの実行にはStatementよりPreparedStatementを使おう」というエントリを掲載しました。参考にしてください。
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=497

投稿:竹形 誠司[takegata]/2009年 01月 27日 02時 57分 /更新:2009年 01月 27日 02時 57分