• 20160408javaweb之JDBC 大二进制和大文件存取


    一、大文本存取:

    我们有一本约10M的小说,现存入数据库:

    代码如下:以junit测试的方式给出

    package com.dzq.lob;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.Reader;
    import java.io.Writer;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import org.junit.Test;
    
    import com.dzq.util.JDBCUtils;
    
    public class TextDemo1 {
    @Test
    public void addText(){
       Connection conn=null;
       PreparedStatement ps=null;
       ResultSet rs=null;
       String sql="insert into textdemo values (null,?,?)";
       try{
           conn=JDBCUtils.getConn();
           ps=conn.prepareStatement(sql);
           ps.setString(1, "钢铁是怎样炼成的.txt");
           File file=new File("1.txt");
           ps.setCharacterStream(2, new FileReader(file),(int)file.length());
           ps.executeUpdate();
       }catch(Exception e){
           e.printStackTrace();
       }finally{
           JDBCUtils.close(rs, ps, conn);
       }
    }
    
    @Test
    public void findText(){
         
           Connection conn=null;
           PreparedStatement ps=null;
           ResultSet rs=null;
           String sql="select * from textdemo where id=?";
           try{
               conn=JDBCUtils.getConn();
               ps=conn.prepareStatement(sql);
               ps.setInt(1, 5);
               rs=ps.executeQuery();
               while (rs.next()) {
                String filename=rs.getString("name");
                Reader reader=rs.getCharacterStream("content");
                Writer writer=new FileWriter(filename);
                
                char []cs=new char[1024];
                int i=0;
                while ((i=reader.read(cs))!=-1) {
                    writer.write(cs,0,i);
                }
                reader.close();
                writer.close();
            }
           }catch(Exception e){
               e.printStackTrace();
           }finally{
               JDBCUtils.close(rs, ps, conn);
           }
    }
    }

    二、大二进制存取:

    我们有一个mp3文件,现存入数据库

    代码如下:

    package com.dzq.lob;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import org.junit.Test;
    
    import com.dzq.util.JDBCUtils;
    
    public class BlobDemo1 {
     @Test
     public void addBlob(){
         Connection conn=null;
           PreparedStatement ps=null;
           ResultSet rs=null;
           String sql="insert into blobdemo values (null,?,?)";
           try{
               conn=JDBCUtils.getConn();
               ps=conn.prepareStatement(sql);
               ps.setString(1, "洛天依.mp3");
               File file=new File("1.mp3");
               ps.setBinaryStream(2, new FileInputStream(file),(int)file.length());
               ps.executeUpdate();
           }catch(Exception e){
               e.printStackTrace();
           }finally{
               JDBCUtils.close(rs, ps, conn);
           }
         
     }
     @Test
     public void findBlob(){
         Connection conn=null;
           PreparedStatement ps=null;
           ResultSet rs=null;
           String sql="select * from blobdemo";
           try{
               conn=JDBCUtils.getConn();
               ps=conn.prepareStatement(sql);
               rs=ps.executeQuery();
               while (rs.next()) {
                String filename=rs.getString("name");
                InputStream in=rs.getBinaryStream("content");
                OutputStream out=new FileOutputStream(filename);
                
                byte []bs=new byte[1024];
                int i=0;
                while ((i=in.read(bs))!=-1) {
                    out.write(bs,0,i);
                }
                in.close();
                out.close();
            }
           }catch(Exception e){
               e.printStackTrace();
           }finally{
               JDBCUtils.close(rs, ps, conn);
           }
     }
    }

    三、其中出现的问题见链接:

    使劲点我啊

  • 相关阅读:
    模-数(A/D)转换器
    数-模(D/A)转换器
    VIM 常用命令
    Linux常用命令
    一个开关电源传导、辐射处理案例-----Layout环路
    解决:PADS导入.DXF结构图出现坐标超出范围问题
    Python3-threading模块-多线程
    Python3-socketserver模块-网络服务器框架
    Python3-socket模块-低级网络接口
    Python3-面向对象
  • 原文地址:https://www.cnblogs.com/xiaoduc-org/p/5369319.html
Copyright © 2020-2023  润新知