【SSH网上商城】Incorrect datetime value: '' for column 'pdate' at row 1

痛定思痛。 2022-08-19 13:20 326阅读 0赞

【项目说明】

在做网上商城的项目的时候,向数据库中插入数据插不进去,显示pdate(pdate为上传商品的日期)的错误,查看了一下数据库中的pdate格式为2014-11-02 20:18:00,需要引用的也都引用了, 具体错误提示:

【错误提示】

ERROR JDBCExceptionReporter:234 - Data truncation: Incorrectdatetime value: ‘’ for column ‘pdate’ at row 1

org.springframework.dao.DataIntegrityViolationException:could not insert: [cn.itcast.shop.product.vo.Product]; SQL [insert into product(pname, market_price, shop_price, image, pdesc, is_hot, pdate, csid) values (?,?, ?, ?, ?, ?, ?, ?)]; nested exception isorg.hibernate.exception.DataException: could not insert:[cn.itcast.shop.product.vo.Product]

【解决方案】

遇到问题后查到了几种解决方案:

方法一:

在jdbc里添加“&useOldAliasMetadataBehavior=true”

Center

添加了以后还是没有解决,排除!

方法二:

错误原因:一般是数据库表中的字段包含了数据库的关键字(保留字)
处理方法:修改数据库中和关键字产生冲突的字段名,重新映射字段名和bean中的类名

查询了一下发现没有冲突的字段名,排除!

方法三:

对pdate使用SimpleDateFormat进行转换,转换成和数据库一致的格式:yyyy-MM-dd hh:mm:ss

先看原代码如下:

  1. <strong>// 查询所有的商品:
  2. public String findAll() {
  3. PageBean<Product> pageBean = productService.findByPage(page);
  4. // 将PageBean数据存入到值栈中.
  5. ActionContext.getContext().getValueStack().set("pageBean", pageBean);
  6. // 页面跳转
  7. return "findAll";
  8. }
  9. // 跳转到添加页面的方法:
  10. public String addPage() {
  11. // 查询所有的二级分类:
  12. List<CategorySecond> csList = categorySecondService.findAll();
  13. // 将二级分类的数据显示到页面上
  14. ActionContext.getContext().getValueStack().set("csList", csList);
  15. // 页面跳转
  16. return "addPageSuccess";
  17. }
  18. // 保存商品的方法:
  19. public String save() throws IOException {
  20. // 将提交的数据添加到数据库中.
  21. product.setPdate(new Date());
  22. // product.setImage(image);
  23. if(upload != null){
  24. // 将商品图片上传到服务器上.
  25. // 获得上传图片的服务器端路径.
  26. String path = ServletActionContext.getServletContext().getRealPath(
  27. "/products");
  28. // 创建文件类型对象:
  29. File diskFile = new File(path + "//" + uploadFileName);
  30. // 文件上传:
  31. FileUtils.copyFile(upload, diskFile);
  32. product.setImage("products/" + uploadFileName);
  33. }
  34. productService.save(product);
  35. return "saveSuccess";
  36. }
  37. </strong>

改后的代码:

  1. <strong>// 保存商品的方法:
  2. public String save() throws IOException, ParseException {
  3. // 将提交的数据添加到数据库中.
  4. Date date=new Date();
  5. SimpleDateFormat temp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  6. String date2=temp.format(date);
  7. Date date3=temp.parse(date2);
  8. product.setPdate(date3);
  9. // product.setImage(image);
  10. if(upload != null){
  11. // 将商品图片上传到服务器上.
  12. // 获得上传图片的服务器端路径.
  13. String path = ServletActionContext.getServletContext().getRealPath(
  14. "/products");
  15. // 创建文件类型对象:
  16. File diskFile = new File(path + "//" + uploadFileName);
  17. // 文件上传:
  18. FileUtils.copyFile(upload, diskFile);
  19. product.setImage("products/" + uploadFileName);
  20. }
  21. productService.save(product);
  22. return "saveSuccess";
  23. }</strong>

将两个代码放到一块对比一下,看看输出的结果有什么不一样的:

  1. // 保存商品的方法:
  2. public String save() throws IOException, ParseException {
  3. // 将提交的数据添加到数据库中.
  4. Date date=new Date();
  5. SimpleDateFormat temp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  6. String date2=temp.format(date);
  7. Date date3=temp.parse(date2);
  8. System.out.println(date3);
  9. System.out.println(date);
  10. if (date == date3) {
  11. String a=null;
  12. }
  13. product.setPdate(date);
  14. // product.setImage(image);
  15. if(upload != null){
  16. // 将商品图片上传到服务器上.
  17. // 获得上传图片的服务器端路径.
  18. String path = ServletActionContext.getServletContext().getRealPath(
  19. "/products");
  20. // 创建文件类型对象:
  21. File diskFile = new File(path + "//" + uploadFileName);
  22. // 文件上传:
  23. FileUtils.copyFile(upload, diskFile);
  24. product.setImage("products/" + uploadFileName);
  25. }
  26. productService.save(product);
  27. return "saveSuccess";
  28. }

Center 1

从输出的结果上来看,没有什么不一样的,好在在这边添加了一句判断他们的输出结果是否一样,结果真没走这段代码,看来用肉眼是看不出来不同了。就这样解决了!**出现这种情况原因还是没有想清楚,有遇到这种情况的可以一块探讨!**

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读