当前位置: 首页 > news >正文

向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,就可以看到你下载的图片了 

 

 

相关文章:

  • JDK、STS、SVN、Tomcat 、mysql的下载安装及环境变量的配置和sts修改字体大小
  • SM1、SM2 、SM3、 SM4算法
  • 解决java.net.ConnectException: Connection refused:connect报错
  • 密码学和Base64
  • 对称密钥算法与非对称密钥算法
  • 秘钥管理和PKI
  • java安全体系:JCA、JCE、JSSE、JAAS
  • 下载安装Bouncy Castle 密码包之静态方法
  • 解决Exception in thread main java.lang.Error: Unresolved compilation problem:Syntax error...报错
  • ASN.1概述及数据类型详解、站点证书的下载
  • 数字信封
  • X.509数字证书
  • 证书有效性验证、根证书
  • 不同证书格式Der 、Cer 、Pfx 、Pem区别
  • Jna与Jni调用C/C++效率比较
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript的使用你知道几种?(上)
  • JavaScript服务器推送技术之 WebSocket
  • Linux链接文件
  • NSTimer学习笔记
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React Transition Group -- Transition 组件
  • Redux 中间件分析
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 深度解析利用ES6进行Promise封装总结
  • 算法系列——算法入门之递归分而治之思想的实现
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ![CDATA[ ]] 是什么东东
  • #微信小程序:微信小程序常见的配置传值
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言)共用体union的用法举例
  • (二)hibernate配置管理
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (力扣)循环队列的实现与详解(C语言)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)插入排序
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET NPOI导出Excel详解
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET下ASPX编程的几个小问题
  • .sys文件乱码_python vscode输出乱码
  • @EnableAsync和@Async开始异步任务支持
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20150321]索引空块的问题.txt
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [BROADCASTING]tensor的扩散机制