【jdbc编程】

问题一:ps.setObject(i + 1, params[i])乱码,url未编码或者编码添加的位置不正确

我的是由

jdbc:mysql://localhost:3306/mytest?createDatabaseIfNotExist=true&allowMultiQueries=true&autoReconnect=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8

改为

jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8&ampcreateDatabaseIfNotExist=true&allowMultiQueries=true&autoReconnect=true&useUnicode=true&zeroDateTimeBehavior=convertToNull

,问题解决

问题二:

1、上传文件使用spring-mvc框架,可以导入commons-io和commons-upload的jar包,借用

        MultipartHttpServletRequest mreq = (MultipartHttpServletRequest) req;MultipartFile file = mreq.getFile("file");

即可获取上传的文件。

2、使用原生jdbc上传文件,可借用DiskFileItemFactory和ServletFIleUpload将request中的请求数据取出,这里需要注意因为表单使用了enctype="multipart/form-data" method="post",所以request.getParameter();获取不到数据,我的处理是用把通过DiskFileItemFactory和ServletFileUpload获取的请求数据封装到map集合里,然后就可以正常取值判断了。

private synchronized Map<String, String> getReqData(HttpServletRequest req, int type) throws Exception {req.setCharacterEncoding("utf-8");boolean isMultipart = ServletFileUpload.isMultipartContent(req);Map<String, String> reqMap = new HashMap<String, String>(9);String epFileName = null;String filePath = null;if (isMultipart) {DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);try {List<FileItem> items = upload.parseRequest(req);// 循环items获取上传文件后缀名for (FileItem item : items) {if (!item.isFormField() && !StringUtil.isNullOrEmpty(item.getName())) {epFileName = item.getName();}}for (FileItem item : items) {if (item.isFormField()) {String fieldName = item.getFieldName();String value = item.getString("UTF-8");reqMap.put(fieldName, value);} else {if (!StringUtil.isNullOrEmpty(epFileName)) {// String path =// req.getSession().getServletContext().getRealPath("\\upload");//// 服务器路径String path = "E:uploadPic"; // 本地路径// String path = "/EasybuySystem2/WebRoot/upload"// \\ 代表创建子文件夹filePath =path + "\\" + DateUtil.format(new Date(), "yyyyMMdd") + "\\"+ epFileName.replace(".", "(" + DateUtil.format(new Date(), "HHmmssSSS") + ").");File newFile = new File(filePath);String fileName = item.getName();if (!StringUtil.isNullOrNot(fileName)) {item.write(newFile);}}}}} catch (FileUploadException e) {// 失败,删除本地上传的文件this.delLocalFile(filePath);filePath = null;log.debug("为上传图片新建本地名称,getFilePath方法发生异常,uri=" + req.getRequestURL());}}log.debug("为上传图片新建本地名称, 文件路径:filePath=" + filePath);log.debug("为上传图片新建本地名称, 数据reqMap=" + reqMap);reqMap.put("epFileName", epFileName);reqMap.put("epFilePath", filePath);return reqMap;}

    private void doAdd(HttpServletRequest req, HttpServletResponse resp) throws Exception {// 途径一:使用DiskFileItemFactory,https://blog.csdn.net/qq_31463999/article/details/79197375// 途径二:使用multipartFile强转requestMap<String, String> reqMap = getReqData(req, 0);String epName = reqMap.get("epName");String epDesc = reqMap.get("epDesc");String epPriceStr = reqMap.get("epPrice");String epStockStr = reqMap.get("epStock");String epcParentId = reqMap.get("epcParentId");String epQrcode = reqMap.get("epQrcode");String epFileName = reqMap.get("epFileName");String filePath = reqMap.get("epFilePath");// qrcode从toAddJSP跳转时随机生成,条形码以io流读入数据库;字段(qrcode)// 获取上传图片信息,页面可控制大小范围// 方式一,存入数据库(采用)--字段(picture);方式二,存到本地(blob字段使用遇到问题)if (StringUtil.isAnyNullOrEmpty(epName, epDesc, epPriceStr, epcParentId, epFileName)) {// 参数错误
            req.setAttribute(ConstantUtil.MESSAGE_ERROR, ConstantUtil.ILLEGAL_PARAM);if (!StringUtil.isNullOrEmpty(filePath)) {this.delLocalFile(filePath);}} else {double epPrice = StringUtil.toDouble(epPriceStr, 0.00);int epStock = StringUtil.toInt(epStockStr, 0);if (!StringUtil.isNullOrEmpty(filePath)) {Product product =new Product(IdUtil.getSeqNo(), epName, epDesc, epPrice, epStock, epcParentId, epQrcode, epFileName);product.setEpfilePath(filePath);if (ps.add(product)) {req.setAttribute(ConstantUtil.MESSAGE_ERROR, ConstantUtil.SUCCESS_ADD);} else {this.delLocalFile(filePath);req.setAttribute(ConstantUtil.MESSAGE_ERROR, ConstantUtil.FAIL_ADD);}}}req.setAttribute(ConstantUtil.URI, DEFAULT_URI);req.getRequestDispatcher("msg-result.jsp").forward(req, resp);}

时间问题,以后有时间再做进一步总结!无论如何,bug总是事出有因

转载于:https://www.cnblogs.com/huakaiyoushi/p/10618900.html

jdbc编程遇到文件上传相关推荐

  1. Android Day05-网络编程之文件上传

    Android文件上传实现 分析:利用抓包工具查看文件上传发现,文件上传的请求体十分的复杂,根本难以用 HttpURLConnection.HttpClient来实现.但是用AsyncHttpClie ...

  2. 【java笔记】网络编程:文件上传案例

    原理:文件的复制 客户端读取本地的文件,把文件上传到服务器,服务器把上传的文件保存到服务器的硬盘上 步骤: 1.客户端使用本地的字节输入流,读取要上传的文件 2.客户端使用网路字节输出流,把读取的文件 ...

  3. Java网络编程实现文件上传和下载案例详解

    客户端: 文件上传案例的客户端:读取本地文件,上传到服务器,读取服务器回写的数据 明确: 数据源:c:\1.jpg 目的地:服务器 实现步骤: 1.创建一个本地字节输入流FileInputStream ...

  4. KOA框架编程18-多文件上传-③-el-upload插件上

    目录 背景 el-upload 一键上传-(假象,因为网络层还是多个上传请求) 代码实现 html

  5. iphone文件怎么上传到服务器,iPhone编程中文件上传到HTTP服务器

    宝慕林4294392 下面的代码使用HTTPPOST将NSData发布到Web服务器.您还需要一些PHP方面的知识.NSString *urlString = @"http://yourse ...

  6. FTP编程实验——实现文件上传下载(基于Python3.7和PyQt5)

    目录 FTP编程实现文件上传下载(基于Python3.7和PyQt5) 一.实验目的 二.实验内容 三.实验步骤 (一)服务器端 (二)客户端 [1] 界面设计 [2] 生成布局代码 [3] 功能实现 ...

  7. 网络编程 UDP通信的过程 TCP通信过程 多线程文件上传

    网络概述 协议 在网络之间传出数据时需要按照指定的标准来传输,标准中规定了数据的格式.大小.传输的方式.传输速率.形成统一规范->按照规范开发的代码->协议(应用层.传输层.网络层.链路层 ...

  8. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  9. ajax servlet增删改查,Servlet ajax 文件上传和JDBC+Servler用户表增删改查

    昨天晚上帮一个妹子,应该是大二或者大三的.解决了Servlet+JDBC实现用户表的增删改查功能,当时妹子遇到的问题是文件上传和日期格式处理不太会. 我让她把代码发我,我本地调试,结果发现坑很多,就是 ...

  10. Python3之socket编程(TCP/UDP,粘包问题,数据传输、文件上传)

    一.socket的定义 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后 ...

最新文章

  1. python网络通信的几种方式_两种方式,java=python,使用py4j进行通信
  2. 关于li标签之间的间隔如何消除!
  3. WPF中的Attached Property
  4. 阿里云DDoS高防 - 访问与攻击日志实时分析(四)
  5. 硬件开源产品_5种适合户外活动的开源硬件产品
  6. 从零基础入门Tensorflow2.0 ----八、43. 自定义流程分布式
  7. SGD和带momentum的SGD算法
  8. Java创造者詹姆斯·高斯林采访
  9. LoadRunner “add measurements”(添加度量)菜单问题
  10. 测试开发人员与开发人员_我是真正的开发人员还是优秀的Googler?
  11. 如何在工作中提升自己
  12. C# System.BadImageFormatException 解决方法
  13. Android事件分发原理
  14. 目前国内几大著名报表软件
  15. Spring Boot 任务调度
  16. NLP学院网:李斌NLP关键执行:由谁去给猫挂铃铛?
  17. (转)从奴隶到程序员的十年历程
  18. synopsys破解教程具体操作
  19. 【山科OJ】Problem D: 藏头诗
  20. Mitmproxy 配置二级代理

热门文章

  1. Springmvc与jasperreport结合生成报表的一种方法
  2. [收藏]Visual Component Framework
  3. 「leetcode」222.完全二叉树的节点个数
  4. 苹果Mac必备增强型拖拽操作工具:Dropover
  5. 如何在Mac上禁用通知预览?
  6. Topaz DeNoise AI 3.6.2 for Mac(图片降噪软件)
  7. MAMP Pro for Mac(PHP/MySQL开发环境工具)
  8. Mac如何解压rar,zip等各种格式文件
  9. linux 中软件安装的三种方法
  10. common,Google Guava,Guice