向oracle中插入图片和读取图片

向oracle中插入图片和读取图片

代码如下:

package demo;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.fabric.xmlrpc.base.Data;

public class Test {
	 private Connection conn;
	 
	    /**
	     * 得到一个数据库的连接
	     * 
	     * @return 返加Connection对象
	     */
	    public Connection getConnection() {
	        try {
	            Class.forName("oracle.jdbc.driver.OracleDriver");
	            conn = DriverManager.getConnection(
	                    "jdbc:oracle:thin:@localhost:1521:mldn", "scott", "tiger");
	        } catch (ClassNotFoundException e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        } catch (SQLException e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }
	        return conn;
	    }
	 
	    /**
	     * 向表中插入图片
	     * 
	     * @param path图片所在的路径
	     * @return 整形 判断成功或失败
	     */
	    public int insertImage(String path) throws Exception {
	    	System.out.println("----insertPhoto");
	        Connection conn = null;
	    	int i = 0;
	        Statement st = null;
	        ResultSet rs = null;
	        conn=this.getConnection();
	         
	        conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步
	        st = conn.createStatement();//获取一个可以执行sql语句的对象
	        
	        i = st
	                .executeUpdate("insert into IMAGE1 (\"id\",\"image\") values (2,'1')");
	        
	        rs = st
	                .executeQuery("select \"image\" from IMAGE1 where \"id\"=(select max(\"id\") from IMAGE1) for update");
	        if (rs.next()) {
	            //得到流
	            oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
	            //从得到的低级流构造一个高级流
	            PrintStream ps = new PrintStream(blob.getBinaryOutputStream());
	            BufferedInputStream bis = new BufferedInputStream(
	                    new FileInputStream(path));
	            byte[] buff = new byte[1024];
	            int n = 0;
	            //从输入到输出
	            while ((n = bis.read(buff)) != -1) {
	                ps.write(buff, 0, n);
	 
	            }
	            //清空流的缓存
	            ps.flush();
	            //关闭流,注意一定要关
	            ps.close();
	            bis.close();
	        }
	        rs.close();
	        st.close();
	        conn.close();
	        return i;
	    }
	
	    /**
	     * 从oracle中读取图片
	     * 
	     * @param path图片所在的路径
	     * @return 整形 判断成功或失败
	     */
	    public int getImage(String path) throws Exception {
	    	System.out.println("----getPhoto");
	    	int j = 0;
	        Statement  st = null;
	        ResultSet rs = null;
	        conn=this.getConnection();
	        conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步
	        st = conn.createStatement();//获取一个可以执行sql语句的对象
	        rs =  st
	                .executeQuery("select \"image\" from IMAGE1 where \"id\"=(select max(\"id\") from IMAGE1) ");
	       if (rs.next()) {
	    	   java.sql.Blob blob = rs.getBlob(1);
	    	    InputStream ins = blob.getBinaryStream();
	    	     //用文件模拟输出流
	    	File file = new File("d:\\output.txt");
	    	    OutputStream fout = new FileOutputStream(file);
	    	     //下面将BLOB数据写入文件
	    	     byte[] b = new byte[1024];
	    	     int len = 0;
	    	         while ( (len = ins.read(b)) != -1) {
	    	           fout.write(b, 0, len);
		} 
	    	         //依次关闭
	    	         j=2;
	    	         fout.close();
	    	         ins.close();
	    	         conn.commit();
	    	         conn.close();                
	        }
	        rs.close();
	        st.close();
	        return j;
	    }

	    public static void main(String[] args) throws Exception {
	    	int out;
	    	int out2;
	        Test test=new Test();
	       out= test.insertImage("e://psb.jpg");
	       System.out.println(out);
	       System.out.println("上传图片成功!");
	       out2=test.getImage("e://psb.jpg");
	       System.out.println(out2);
	       System.out.println("读取图片成功!");
	 
	 
	    }
	 
}

执行后如下图所示: 

 

用画板打开下载的output.txt,就可以看到你下载的图片了 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值