java 将本地图片或者XML文件存到oracle BLOB字段数据库中

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import oracle.sql.BLOB;

public class test {
    private static final String DB_URL = "jdbc:oracle:thin:@10.193.40.189:1521:orcl";

    private static final String DB_USER = "system";

    private static final String DB_PASSWORD = "hik12345";

    private static Connection conn = null;

    public static void main(String[] args) throws Exception {
            // insert into blob
            Connection conn = getConnection();

            //存图片
          /*  PreparedStatement ps = conn
                    .prepareStatement("INSERT INTO T_HUMAN_PICTURE (photoid,photo) values ('1',?)");

            String inFile = "D:/test.jpg";

            //设定的是blob类型
            ps.setBlob(1, file2Blob(inFile));
            ps.executeUpdate();*/
            
            //存xml文件
            PreparedStatement ps = conn
                    .prepareStatement("INSERT INTO T_HUMAN_XML (cid,cpxml) values ('1',?)");

            String inFile = "D:/test.xml";

            //设定的是blob类型    
           // ps.setBlob(1, file2Blob(inFile));
            File file = new File(inFile); 
            ps.setBytes(1, File2byte(file));
            ps.executeUpdate();
            
    }
    
    public static byte[] File2byte(File file)
    {
     byte[] buffer = null;
     try
     {
      
      FileInputStream fis = new FileInputStream(file);
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      byte[] b = new byte[1024];
      int n;
      while ((n = fis.read(b)) != -1)
      {
       bos.write(b, 0, n);
      }
      fis.close();
      bos.close();
      buffer = bos.toByteArray();
     }
     catch (FileNotFoundException e)
     {
      e.printStackTrace();
     }
     catch (IOException e)
     {
      e.printStackTrace();
     }
     return buffer;
    }

    /**
     * upload file
     * 通过二进制的方式来上传文件
     */
    public static void testFile2byte(){
        try {
            // insert into blob
            Connection conn = getConnection();

            PreparedStatement ps = conn
                    .prepareStatement("INSERT INTO WORD_FILE (GYO_NUM,WORD_KB,WORD_FILENAME,BIKO,USR_ID,YMDT,WORD_FILE) values (4,'KYK002','20171114test.doc','備考','VENAS',TO_DATE('17-11-14','RR-MM-DD'),?)");

            String inFile = "C:/Users/zhangrw/Desktop/test/2nANQz3wsFN8rkrTZa5P8xQY8PRBhyHw.jpg";

            byte [] result = file2Byte(inFile);
            //设定的是自己码文件
            ps.setBytes(1, result);
            ps.executeUpdate();
        } catch (SQLException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }

    }
    /**
     * 将文件转化为Blob的对象
     * create file 2 blob
     * @param inFile
     * @return
     */
    public static Blob file2Blob(String inFile){

        try {

            byte [] result = file2Byte(inFile);
            //creat a new blob
            BLOB blob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);

            //set start is 1
            //这个setBytes 是指定起点,然后设定字节
            blob.setBytes(1, result);

            //pub byte 这个方法是添加byte
//          blob.putBytes(1, result);

            return blob;
        } catch (Exception e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将文件转化为二进制的数据
     * create file 2 byte
     * @param inFile
     * @return
     */
    public static byte[] file2Byte(String inFile){
        InputStream in = null;
        try {
            in = new FileInputStream(new File(inFile));

            int len = in.available();
            byte [] result = new byte[len];
            in.read(result);

            return result;
        } catch (Exception e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        return null;

    }

    static {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");

            conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
        } catch (Exception e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {

        try {
            if (conn == null) {
                Class.forName("oracle.jdbc.driver.OracleDriver");

                conn = DriverManager
                        .getConnection(DB_URL, DB_USER, DB_PASSWORD);
            }
            return conn;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}
 

你可能感兴趣的:(java技术)