java不能直接想插入其他普通类型数据一样插入blob字段数据,因为blob相当于一个大文件块,里面有游标,需要初始化blob游标才能插入数据。所以我们要先插入一个空的blob数据,以初始化游标,然后再往这个blob字段中写入数据,来实现插入blob数据的效果,代码如下:

package controller;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DBHelper {private static Connection conn;                                        //用于建立数据库连接private PreparedStatement pres;                                        //执行sql的preparedStatementstatic{try {Class.forName("oracle.jdbc.OracleDriver");                     //加载驱动类String url="jdbc:oracle:thin:@192.168.75.131:1521:orcl";     //连接数据库的urlString user="jerry";String pwd="jerry";conn=DriverManager.getConnection(url,user,pwd);                //请求数据库连接} catch (ClassNotFoundException | SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//写入blob数据public void writeBlob(){try {conn.setAutoCommit(false);                                     //关闭自动提交String sql="insert into blobtest values(?,?,?)";               //插入语句pres=conn.prepareStatement(sql);pres.setInt(1, 1);                          pres.setString(2, "jerry");pres.setBlob(3,oracle.sql.BLOB.getEmptyBLOB());                //先插入空的BLOB,获取游标pres.executeUpdate();sql="select photo from blobtest where id=?";pres=conn.prepareStatement(sql);pres.setInt(1, 1);                                             //找出ID为1的,也就是刚刚插入的ResultSet res=pres.executeQuery();res.next();Blob imageBlob=res.getBlob(1);                                 //得到该空的blobOutputStream os = imageBlob.setBinaryStream(0); // 读取想要存储的图片文件  InputStream is = new FileInputStream("G:\\jerry.jpg");  // 依次读取流字节,并输出到已定义好的数据库字段中.  int i = 0;  while ((i = is.read()) != -1) {  os.write(i);                                               //Blob的输入流,相当于输入到数据库中}  os.flush();  os.close();  conn.commit();  conn.setAutoCommit(true);// 恢复现场 if(res!=null)res.close();if(pres!=null)pres.close();System.out.println("插入成功!!!");} catch (SQLException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void getImage(){String sql="select photo from blobtest where id=?";try {pres=conn.prepareStatement(sql);pres.setInt(1, 1);ResultSet res=pres.executeQuery();while(res.next()){Blob image=res.getBlob(1);                                         //得到该blobInputStream is = image.getBinaryStream();                          //获得该blob的输出流FileOutputStream fos = new FileOutputStream("E:\\outputImage.jpg");  int i = 0;  while ((i = is.read()) != -1) {  fos.write(i);  }  fos.flush();  fos.close();  is.close();  }System.out.println("成功输出图片!!!");} catch (SQLException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

java向Oracle数据库中插入blob字段数据相关推荐

  1. Oracle数据库中插入日期型数据

    如果插入Oracle的当前系统时间可以用 SYSDATE INSERT INTO FLOOR VALUES ( SYSDATE ) ; 往Oracle数据库中插入日期型数据(to_date的用法) 今 ...

  2. JDBC向数据库中插入BLOB类型数据

    目录 1.Blob介绍 2.使用PreparedStatement向数据表中插入Blob类型字段 3.从数据表中读取Blob类型数据 4.特殊情况说明 1.Blob介绍 Blob是一种二进制数据文件, ...

  3. Java 对Oracle数据库中的 BLOB类型 插入图片

    2019独角兽企业重金招聘Python工程师标准>>> package test;import java.io.BufferedInputStream; import java.io ...

  4. oracle blob字段索引,在oracle 数据库中使用 Blob 字段存储 一张图片并读取

    1. 进行数据库的设置  create table image_lob(t_id varchar2(5) not null,t_image blob not null); create or repl ...

  5. java如何向数据库中插入数据_如何控制Java代码向数据库中插入数据

    慕哥6287543 Java程序向数据库中插入数据,代码如下:123456789101112131415161718192021222324252627282930313233343536373839 ...

  6. 如何向Oracle数据库中插入带有特殊符号“”的数据

    今天在向Oracle数据库中插入数据的时候遇到了下面这个错误: 经过了一番排查之后,发现弹出这个对话框的原因是我插入的数据中有"&"这个符号, 因为要插入数据的表中有url ...

  7. oracle数据库插入多表,在Oracle数据库中插入嵌套表

    我是PL/SQL数据库的新学习者,这是一种给apex.oracle.com上的数据库应用指定序列的练习.然后我创建了表格,但是当填充与插入的代码如下所示,应用赋予错误,表你不介意,我需要你的帮助在Or ...

  8. oracle删除字段约束条件,Oracle 数据库中关于对表字段约束的操作(设置、删除、查询)...

    Oracle 数据库中关于对表字段约束的操作(设置.删除.查询) 1. 给表的单个字段加约束 SQL> ALTER TABLE 表名 ADD UNIQUE(字段名); 2. 删除表的单个字段约束 ...

  9. mysql十万条数据_2秒内向数据库中插入十万条数据?

    怎么向数据库中快速插入十万条数据呢,当然得需要对比才能看到效果,今天给大家亲身测了两种方法对比,差别25倍左右 1,数据库用sql server 2008 r2,表结构非常简单,四个字段,建数据表的s ...

最新文章

  1. linux生成md5指定文件名,linux 通过MD5监控指定路径文件的变动
  2. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——41~66
  3. requirejs的用法(二)
  4. python实现卷积_【python实现卷积神经网络】池化层实现
  5. 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。...
  6. IEEE期刊论文模板的查找,下载方法--
  7. python测网速_tespeed-测试网速的Python工具
  8. 冯鑫、雷军、王峰、蒋涛、傅盛等金山系老将,已将区块链拼成完整生态图
  9. 2014 usnews 计算机科学 排名 天道留学,2014年USNews美国公立大学排名
  10. VPLS原理+两个实验
  11. 产品新人如何才能找到第一份产品工作?
  12. (三)CSS前端开发面试会问到的问题有哪些?
  13. Vue项目流程7,交易页面,提交订单,支付页面,利用element UI 以及 QRCode 完成微信支付,弹出框按钮的相关工作,个人中心以及子路由我的订单
  14. 点击率(CTR)平滑手段
  15. 《微信公众平台开发最佳实践》——导读
  16. java 判断是否包含中文_Java中判断字符串中是否包含中文汉字
  17. HTML介绍以及常用代码
  18. 旧版本Launch Standalone SDK Manager消失或者新版本刷新不出来目录
  19. mysql数据结构面试题_MySQL面试题汇总
  20. 欧拉phi函数与欧拉定理

热门文章

  1. DevSecOps简介(二)
  2. Hotspot JVM的常用选项
  3. Jquery改变窗体大小
  4. POJ 3678 Katu Puzzle
  5. C#.net实现密码加密算法的语句
  6. 面试精讲之面试考点及大厂真题 - 分布式专栏 15 如何解决消息重复,保证消息顺序问题
  7. 容器编排技术 -- Kubernetes 为 Namespace 配置CPU和内存配额
  8. Golang 实现tcp转发代理
  9. java TCP 从客户端键入信息 循环接收发送 示例
  10. css里的符号含义【串联选择器】和【后代选择器】