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();
}

%>
时间: 2024-10-02 09:45:43

JDBC存储和读取二进制数据的相关文章

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

一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次即可读出数据. • Mysql中相关类型: – TINYTEXT最大长度为255  (28–1)字符的TEXT列. – TEXT[(M)]最大长度为65,535  (216–1)字符的TEXT列. – MEDIUMTEXT最大长度为16,777,215  (224–1)字符的TEXT列 – LONG

matlab读取二进制数据文件的方法

matlab可以直接读取二进制数据文件,并且可以将其加入到矩阵中. 如果对c语言十分熟悉的话,应该对fopen,fclose,ftell,fseek,fread,fwrite,feof 这些函数非常熟悉了,幸运的是在matlab中仍然可以使用这些函数来读入实验数据. 现在假定有一个数据文件叫data.dat,它的前面2k是存放参数的,我们做数据处理的时候 需要跳过去,后面的数据是16位整数类型的,每组数据有512个.现在要把该数据文件的 所有数据读入一个nx512的矩阵中,n的个数不定,根据数据

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

子在一天一天虚度,生活也在一天一天中茫然 做人做事哪能尽如人意,付出多少收获多少虽然存在偏颇,但是不劳而获的心态是万万不对的,更不能去怨天尤人,低调为人.做好自己就可以了 改进你的系统的最好的方法是先避免做“蠢事”.我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含的牵连,认识不到这样做对 系统维护尤其是系统升级带来多大的麻烦.作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的决定的人有过好的结果的. 图片,文件,二进制数据 既然数据库支持 BLOB 类型的

JDBC流ASCII和二进制数据

PreparedStatement对象可以使用输入和输出流来提供参数数据.能够将整个文件放入可以容纳大值的数据库列,例如CLOB和BLOB数据类型. 有以下方法可用于流式传输数据 - setAsciiStream():此方法用于提供大的ASCII值. setCharacterStream():此方法用于提供较大的UNICODE值. setBinaryStream():此方法用于提供较大的二进制值. setXXXStream()方法除了参数占位符之外还需要额外的参数和文件大小.此参数通知驱动程序使

使用jQuery AJAX读取二进制数据

READING BINARY DATA USING JQUERY AJAX http://www.henryalgus.com/reading-binary-files-using-jquery-ajax/ Query is an excellent tool to make web development easy and straightforward. It helps while doing DOM manipulation and makes Ajax requests painles

mysql 存储二进制数据

晚上小研究了下MySQL存储于读取二进制数据的功能.关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long) 插入二进制数据时需要利用mysql_real_escape_string函数对数据进行转换 从数据库中读取二进制数据时需要利用mysql_fetch_length函数字段长度,该函数需要在mysql_fetch_row调用后才可以正常获取结果 给出一个用C写的一个存储与读取字段的小例子,写的比较粗犷,见谅哈~ 先来

二进制数据将图片保存到数据库,并读取数据库二进制数据显示图片

一. 浏览图片 OpenFileDialog ofd = new OpenFileDialog();            ofd.InitialDirectory = @"E:\";            ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files(*.*)|*.*";            ofd.RestoreDirectory = true; if (ofd

01- - -1.获得项目中info.plist文件的内容 2.沙盒的数据存储及读取 3.控制器view的高度和状态栏statusBar的关系 4.[UIScreen mainScreen].applicationFrame的取值 5.按钮的状态 6.错误调试技巧 7.按钮的各种状态设置

1.获得项目中info.plist文件的内容 1> [NSBundle mainBundle].infoDictionary 2> 版本号在info.plist中的key:kCFBundleVersionKey 2.沙盒的数据存储及读取 1> 数据存储: [[NSUserDefaults standardUserDefaults] setObject:version forKey:versionKey]; 存储数据时记得同步一下 [[NSUserDefaults standardUser

讨论贴:Sqlserver varbinary 是二进制数据,却是十六进制的表现形式

首先创建一个数据表 CREATE TABLE [dbo].[log_info]( [id] [int] IDENTITY(1,1) NOT NULL, [info] [varchar](50) NULL, [info1] [varbinary](50) NULL, [imagecol] [image] NULL, [binarycol] [binary](10) NULL ) 向表中插入二进制数据: insert into [log_info] default values update [lo