JDBC插入MySQL报错:Data truncated for column 'period' at row 1

金戈萨贝鲁 2011-09-22 09:31:25
前台用jQuery的AJAX的get方法传递参数
$("#submit_button").click(function(){
$.get("exchange_back.jsp",{title:$("#title").val(),
exchange:$("#exchange").val(),
period:$("input[type=radio]:checked").val(),
description:$("#description").val()},function(responseText){

});
});


exchange_back.jsp:
Class.forName("com.mysql.jdbc.Driver");	
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/YiShu?user=root&password=sad&Unicode=true&characterEncoding=UTF-8");
String sql = "insert into book values(?,?,?,?,now(),adddate(now(),?),?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1,(Integer)session.getAttribute("id"));
pstmt.setString(2,(String)session.getAttribute("username"));
pstmt.setString(3,request.getParameter("title"));
pstmt.setString(4,request.getParameter("exchange"));
pstmt.setString(5,new String(request.getParameter("period").getBytes("iso8859-1"),"utf-8"));
pstmt.setString(6,new String(request.getParameter("period").getBytes("iso8859-1"),"utf-8"));
pstmt.setString(7,request.getParameter("description"));


Eclipse的Console窗口报错:
严重: Servlet.service() for servlet [jsp] in context with path [/YiShu] threw exception [An exception occurred processing JSP page /exchange_back.jsp at line 57

54: System.out.println("adddate(now(),"+request.getParameter("period")+")");
55: //System.out.println(request.getParameter("description"));
56:
57: pstmt.executeUpdate();
58: pstmt.close();
59: conn.close();
60:


Stacktrace:] with root cause
java.sql.SQLException: Data truncated for column 'period' at row 1.
......blablabla

已经把jsp页面、jsp中的html、mysql中的编码都改成了utf8了。period值是30,可以在Console中打印出来的。数据库中的period的格式是int(20)。求解。
...全文
803 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
金戈萨贝鲁 2011-09-22
  • 打赏
  • 举报
回复
找到错误了~!果然把sql语句打出开以后,发现一个两个数据位置写反了。十分感谢。
[Quote=引用 8 楼 huangchenliang 的回复:]

把sql语句打印出来。到数据库执行看下有么有问题。
[/Quote]
完美灬缺陷 2011-09-22
  • 打赏
  • 举报
回复
把sql语句打印出来。到数据库执行看下有么有问题。
安心逍遥 2011-09-22
  • 打赏
  • 举报
回复
period的格式是int(20)。是不是这里给它设置了 pstmt.setString(...)

wangjiangbo2 2011-09-22
  • 打赏
  • 举报
回复
是不是 转码造成的乱码 引起的?
这个需要注意
金戈萨贝鲁 2011-09-22
  • 打赏
  • 举报
回复
原来就是用Integer.parseInt()的。。。也是不行
[Quote=引用 3 楼 huangchenliang 的回复:]

pstmt.setString(5,new String(request.getParameter("period").getBytes("iso8859-1"),"utf-8"));

这里塞的是period字段么?换成Integer试试。
[/Quote]
金戈萨贝鲁 2011-09-22
  • 打赏
  • 举报
回复
period只是个整数类型。
[Quote=引用 1 楼 paneyjiang 的回复:]

是不是时间字段类型不对啊, java.sql.Date; java.util.Date;将java中的时间类型转换为java.sql.Date类型试试呢
[/Quote]
完美灬缺陷 2011-09-22
  • 打赏
  • 举报
回复
pstmt.setString(5,new String(request.getParameter("period").getBytes("iso8859-1"),"utf-8"));

这里塞的是period字段么?换成Integer试试。
完美灬缺陷 2011-09-22
  • 打赏
  • 举报
回复
数据库中的period的格式是int(20)。是不是这里给它设置了 pstmt.setString(...)
paneyjiang 2011-09-22
  • 打赏
  • 举报
回复
是不是时间字段类型不对啊, java.sql.Date; java.util.Date;将java中的时间类型转换为java.sql.Date类型试试呢

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧