以下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存储和读取二进制数据的更多相关文章

  1. SQLite数据库如何存储和读取二进制数据

    SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...

  2. [19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)

    一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次 ...

  3. (第二章第三部分)TensorFlow框架之读取二进制数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...

  4. python 读取二进制数据到可变缓冲区中

    想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...

  5. BLOB存储图片文件二进制数据是非对错

    子在一天一天虚度,生活也在一天一天中茫然 做人做事哪能尽如人意,付出多少收获多少虽然存在偏颇,但是不劳而获的心态是万万不对的,更不能去怨天尤人,低调为人.做好自己就可以了 改进你的系统的最好的方法是先 ...

  6. Cocos Creator存储和读取用户数据--官方文档

    存储数据 cc.sys.localStorage.setItem(key, value) 上面的方法需要两个参数,用来索引的字符串键值 key,和要保存的字符串数据 value. 假如我们要保存玩家最 ...

  7. JDBC流ASCII和二进制数据

    PreparedStatement对象可以使用输入和输出流来提供参数数据.能够将整个文件放入可以容纳大值的数据库列,例如CLOB和BLOB数据类型. 有以下方法可用于流式传输数据 - setAscii ...

  8. 使用jQuery AJAX读取二进制数据

    READING BINARY DATA USING JQUERY AJAX http://www.henryalgus.com/reading-binary-files-using-jquery-aj ...

  9. mysql 存储二进制数据

    晚上小研究了下MySQL存储于读取二进制数据的功能.关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long) 插入二进制数据时 ...

随机推荐

  1. ●POJ 1259 The Picnic

    题链: http://poj.org/problem?id=1259 题解: 计算几何,凸包,DP 题意:给出N($N\leq100$)个点,求出最大的凸包使得凸包里面不存在点(边上可以有).输出最大 ...

  2. 【SYZOI Round1】滑稽的树

    Description zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到.虽然我们看不到,但是还是知道一些信息: 这真的是一棵树,由n个节点,n-1条边联通.一号滑稽果同时 ...

  3. bzoj3173[Tjoi2013]最长上升子序列 平衡树+lis

    3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2253  Solved: 1136[Submit][S ...

  4. 使用WebStorm进行javascript调试

    曾经的选择是使用火狐浏览器的Firebug插件,具体的用法到时候在细说,这篇文章登场的是开发静态网页及javascript的利器--webstorm. 一.相关软件安装和配置 安装WebStorm  ...

  5. springboot由于mysql表类型导致的 setRollbackOnly() 事务不回滚

    在SpringBoot 中,使用事务非常简单,只需在方法上面加入 @Transactional  注解就可以实现.也可加在类上,此时则类中所有方法都支持事务. 而当我使用下面代码时,发现事务却没有回滚 ...

  6. python中如何将生成等差数列和等比数列

    在python库numpy 中提供了函数linspace和logspace函数用于生产等差数列和等比数列.     1.linspace函数生成等差数列 def linspace(start, sto ...

  7. const的一些用法和理解

    首先先说一下const常量的用处,我们知道宏定义#define是没有数据类型的,编译器在编译的时候,不会对宏常量进行类型检查,只进行简单的字符串替换,字符串替换时极易产生意想不到的错误,所以这个时候, ...

  8. C# 枚举在项目中使用心得

    阅读目录 基本介绍 使用注意 使用方法 扩展用法     本文主要是我在项目中对C#枚举的使用心得,如有不足的地方欢迎您指出. 一.基本介绍  枚举是由一组特定常量构成的一组数据结构,是值类型的一种特 ...

  9. new File()

    首先 File 类是对文件系统的映射 并不是硬盘上真实的文件所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会在硬盘中创建文件 如果需要创 ...

  10. Python学习札记-eval函数

    eval()函数 eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果 语法上:调用的是:eval(expression,globals=No ...