JDBC存储和读取二进制数据
以下JSP文件用common-fileupload组件实现文件上传,并将文件以二进制文件的形式存入数据库
<% if("POST".equalsIgnoreCase(request.getMethod)){//如果是POST表单 DiskFileUpload diskFileUpload = newDiskFileUpload(); diskFileUpload.setHeaderEncoding("UTF-8");//设置编码 //解析上传的数据 List <FileItem> list =diskFileUpload.parseRequest(request); for(FileItem fileItem : list){ if(!fileItem.isFormField()){ //如果是文件域 //文件路径,替换掉特殊字符 String filename =fileItem.getName().replace("\\","/"); //获取文件名 filename =filename.substring(filename.lastIndexOf("/")+1); //获取文件类型 String filetype =fileItem.getContentType(); //获取文件大小 Int filesize =fileItem.getSize(); Connection conn = null; PrepareStatement preStmt = null; try{ conn = DbManager.getConnection(); preStmt = conn.prepareStatement( "insert into table_name (filename,filetype,size,content,date) values(?,?,?,?,?)"); preStmt.setString(1,filename); preStmt.setString(2,filetype); preStmt.setInt(3,filesize); preStmt.setBinaryStream(4,fileItem.getInputStream(),filesize); preStmt.setTimestamp(5,newTimestamp(System.currentTimeMills())); preStmt.executeUpdate(); }finally{ if(preStmt != null) preStmt.close(); if(conn != null) conn.close(); } } } } %>读取二进制文件
<% out.clear(); //清空一切输出 int id=Integer.parseInt(request.getParameter("id")); //获取附件ID Connection conn= null; PrepareStatementpreStmt = null; ResultSet rs =null; try{ conn =DbManager.getConnection(); preStmt =conn.prepareStatement("select from table_name where id = ?"); preStmt.setInt(1,id); rs =preStmt.executeQuery(); if(rs.next()){ response.reset(); //重置response response.setContentType(rs.getString("fileType"));//设置输出的文件类型 response.setContentLength(ra.getInt("filesize"));//设置输出的文件长度 InputStream ins = null; OutputStream ous = null; try{ ins = rs.getBinaryStream("content"); ous = response.getOutputStream(); byte [] b = new byte[1024]; int len = 0; while((len = ins.read(b)) !=-1){ ous.write(b,0,len); } }finally{ if(ous != null) ous.close(); if(ins != null) ins.close(); } }else{ out.println("没有找到附件:"+id); } }finally{ if(rs! = null) rs.close(); if(preStmt != null) preStmt.close(); if(conn != null) conn.close(); } %>
JDBC存储和读取二进制数据的更多相关文章
- SQLite数据库如何存储和读取二进制数据
SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...
- [19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)
一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次 ...
- (第二章第三部分)TensorFlow框架之读取二进制数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...
- python 读取二进制数据到可变缓冲区中
想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...
- BLOB存储图片文件二进制数据是非对错
子在一天一天虚度,生活也在一天一天中茫然 做人做事哪能尽如人意,付出多少收获多少虽然存在偏颇,但是不劳而获的心态是万万不对的,更不能去怨天尤人,低调为人.做好自己就可以了 改进你的系统的最好的方法是先 ...
- Cocos Creator存储和读取用户数据--官方文档
存储数据 cc.sys.localStorage.setItem(key, value) 上面的方法需要两个参数,用来索引的字符串键值 key,和要保存的字符串数据 value. 假如我们要保存玩家最 ...
- JDBC流ASCII和二进制数据
PreparedStatement对象可以使用输入和输出流来提供参数数据.能够将整个文件放入可以容纳大值的数据库列,例如CLOB和BLOB数据类型. 有以下方法可用于流式传输数据 - setAscii ...
- 使用jQuery AJAX读取二进制数据
READING BINARY DATA USING JQUERY AJAX http://www.henryalgus.com/reading-binary-files-using-jquery-aj ...
- mysql 存储二进制数据
晚上小研究了下MySQL存储于读取二进制数据的功能.关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long) 插入二进制数据时 ...
随机推荐
- 【网络流】【BZOJ1221】【HNOI2001】软件开发
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1221 题意:你有3种方法进行对毛巾的处理,不同的处理方法有不同的cost,问你要如何规划才 ...
- 【NOIP2016】天天爱跑步
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点 ...
- HDU 4641 K-string
Description Given a string S. K-string is the sub-string of S and it appear in the S at least K time ...
- 【Peaks加强版 BZOJ 3551】你被坑了吗?
这道在没加读入优化时间在20s左右的题终于在大米饼两天的死缠烂打.鬼混.乱整乱撞后艰难地AC了.但惋惜的是,大米饼一号代码其实更加简洁,但至今找不出BUG,我将它放在下面,也许有一天从远方来的另一个大 ...
- bzoj 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- 缓冲区(buffer)与缓存(cache)
下面介绍缓冲区的知识. 一.什么是缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区, ...
- @RequestBody和@ModelAttribute注解
一 .@RequestBody @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify( ...
- Architecture : Describable Command and Identifiable Data
Architecture : Describable Command and Identifiable Data Description Terms Command A command is a fu ...
- Git 常用命令速查表
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
新语法 方法引用Method references Lambda语法 Lambda语法在AndroidStudio中报错 Stream API 我正参加2016CSDN博客之星的比赛 希望您能投下宝贵 ...