王康伯巴奇 2019-01-02 12:07 采纳率: 0%
浏览 1323
已采纳

java向mysql写入数据时,double类型行报错

做了一个插入学生信息的页面,用户填写完相应内容后,调用studentDaoImpl中的addStu方法向数据库写入对应数据

addStu方法

  1. public int addStu(student stu) {
  2. // TODO Auto-generated method stub
  3. sql = "insert into student values(?,?,?,?,?,?)";//int string string int string double
  4. try {
  5. PreparedStatement ps = conn.prepareStatement(sql);
  6. ps.setInt(1, stu.getId());
  7. ps.setString(2, stu.getName());
  8. ps.setDouble(3, stu.getScore());
  9. ps.setString(4, stu.getSex());
  10. ps.setInt(5, stu.getAge());
  11. ps.setString(6, stu.getClassname());
  12. num = ps.executeUpdate();
  13. ps.close();
  14. conn.close();
  15. } catch (SQLException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
  19. return num;
  20. }

**Servlet中取页面输入的数据(数据格式已经用js控制了)

  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. response.setContentType("text/html;charset=utf-8");
  4. int id = Integer.parseInt(request.getParameter("id"));
  5. String name = request.getParameter("name");
  6. double score = Double.parseDouble(request.getParameter("score"));
  7. String sex = request.getParameter("sex");
  8. int age = Integer.parseInt(request.getParameter("age"));
  9. String classname = request.getParameter("classname");
  10. /*添加进数据库前先判断此学生存在了没有
  11. * :存在,返回页面并提示已存在
  12. * :不存在,添加
  13. * */
  14. studentDaoImpl sdi = new studentDaoImpl();
  15. if(sdi.findStuById(id)!=null){
  16. //存在
  17. request.setAttribute("exist", "<font color='red'>此学生已存在</font><br/>");
  18. request.getRequestDispatcher("addStu.jsp").forward(request, response);
  19. }
  20. else{
  21. //不存在
  22. student stu = new student();
  23. stu.setId(id);
  24. stu.setName(name);
  25. stu.setScore(score);
  26. stu.setSex(sex);
  27. stu.setAge(age);
  28. stu.setClassname(classname);
  29. sdi.addStu(stu);
  30. request.setAttribute("exist", "添加成功");
  31. request.getRequestDispatcher("addStu.jsp").forward(request, response);
  32. }
  33. }

这是js代码,用正则表达式控制input的各个数据格式

  1. // JavaScript Document
  2. function check(){
  3. var id = document.getElementsByName('id')[0].value.replace(/(^\s*)|(\s*$)/g, "");
  4. var score = document.getElementsByName('score')[0].value.replace(/(^\s*)|(\s*$)/g, "");
  5. var age = document.getElementsByName('age')[0].value.replace(/(^\s*)|(\s*$)/g, "");
  6. var classname = document.getElementsByName('classname')[0].value.replace(/(^\s*)|(\s*$)/g, "");
  7. var errors = document.getElementsByName('error');
  8. var flag = true;
  9. /*每次点击时都先清空错误提示消息*/
  10. for(var i=0; i<errors.length; i++){
  11. errors[i].innerHTML = "";
  12. }
  13. if(/^[1-9]\d{0,1}/.test(id)==false){
  14. errors[0].innerHTML = "学号输入有误,应为非0开头的1-2位数字";
  15. flag = false;
  16. }
  17. if(/^\d+(\.\d+)?$/.test(score)==false){
  18. errors[1].innerHTML = "分数格式有误,应为非负小数或整数";
  19. flag = false;
  20. }
  21. if(/^[1-9]\d{0,2}$/.test(age)==false){
  22. errors[2].innerHTML = "年龄格式有误,应为1-3位不为0开头的数字";
  23. flag = false;
  24. }
  25. if(/^[1-9]{2}[\u4e00-\u9fa5]{2,3}[1-9]{1}[\u73ed]{1}$/.test(classname)==false){
  26. errors[3].innerHTML = "班级名称格式有误,应为'2位数字+2字专业+1位数字+班'";
  27. flag = false;
  28. }
  29. return flag;
  30. }

在执行时报错Data truncated for column 'score' at row 1,网上搜大多是说格式没有对应上,可能java里的score是个字符串而数据库里的是double,我也特意检查了一下表格式,发现无误,这是创建表的语句

  1. mysql> create table student(
  2. -> id int(10) not null auto_increment,
  3. -> name varchar(20) not null,
  4. -> score double(5,2) not null,
  5. -> sex varchar(2) not null,
  6. -> age int(3) not null,
  7. -> classname varchar(20) not null,
  8. -> primary key(id)
  9. -> )ENGINE=InnoDB, DEFAULT CHARSET=utf8;
  10. Query OK, 0 rows affected (0.01 sec)

不太会排版,有点凌乱了,实在抱歉

展开全部

  • 写回答

1条回答 默认 最新

  • 一剑轻语 2019-01-02 04:42
    关注

    贴一下你的student实体类的score字段。看看他的类型是不是double

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 已采纳回答 3月28日

悬赏问题

  • ¥15 加热反应炉PLC控制系统设计(相关搜索:梯形图)
  • ¥15 python 用Dorc包报错,我的写法和网上教的是一样的但是它显示无效参数,是什么问题
  • ¥15 指定IP电脑的访问设置
  • ¥30 matlab ode45 未发现警告,但是运行出错
  • ¥15 为什么devc++编译项目会失败啊
  • ¥15 vscode platformio
  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部