文档章节

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

青峰Jun19er
 青峰Jun19er
发布于 2018/10/22 11:32
字数 319
阅读 11
收藏 0
package test;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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:lyx", "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 {
		int i = 0;
		Statement st = null;
		ResultSet rs = null;
		conn=this.getConnection();
		
		conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步
		st = conn.createStatement();
		//先插入一个空对象,这里我调用了Empty_BLOB()函数
		i = st
				.executeUpdate("insert into image (id,image) values (seq1.nextval,Empty_BLOB())");
		//以行的方式锁定
		rs = st
				.executeQuery("select image from image where id=(select max(id) from image) 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;
	}

	public static void main(String[] args) throws Exception {
		Test test=new Test();
		test.insertImage("e:\\3.jpg");
		System.out.println("OK");


	}

}

 

© 著作权归作者所有

共有 人打赏支持
青峰Jun19er
粉丝 2
博文 30
码字总数 26391
作品 0
南宁
私信 提问
基于AEAI ESB的处理大字段

1.背景 数据迁移中大字段一直是个比较头疼的问题,一旦大字段中值大于32K的话就无法用sql语句来实现插入和更新。通用的解决办法一般有两种:存储过程和JDBC。下面主要总结下基于AEAI ESB用J...

数通畅联
2015/01/22
0
0
JAVA读取Oracle中的blob图片字段并显示

整个流程分为四步,连接oracle数据库 -> 读取blob图片字段 -> 对图片进行缩放 ->把图片展示在jsp页面上。 下面进行详细描述: 1. java连接Oracle 注:数据库是Oracle10g版本为10.2.0, 在数据...

underA
2013/03/15
0
1
Java大对象类型的Hibernate映射

在Java中,java.lang.String可用于表示长字符串(长度超过255),字节数组byte[]可以用于存放图片户或文件二进制数据。此外,在JDBC API中还提供了java.sql.CLOB和java.sql.BLOB类型,他们分...

frabbit
2013/05/07
0
0
Oracle的JDBC驱动的版本你了解吗?

classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle JDBC驱动来解决的?最常使用的ojdbc14.jar有多...

i33
2012/02/20
0
0
PreparedStatement的setString()长度

前段时间在做一登录模块时,遇到一个文本输入的问题。即,文本的最大值为40000,varchar2类型的,当输入的内容为40000时,却报错。后来查看一下才知道是oracle问题。 参考资料如下: 一、异常...

张胜军
2013/03/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
今天
16
4
Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
2
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
5
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部