oracle数据库插入二进制文件

1.创建表


大型对象(LOB)数据类型

Clob

最大4G,存储单字节字符型数据。适用于存储超长文本。

Nclob

最大4G,存储多字节国家字符型数据。适用于存储超长文本。

Blob

最大4G,存储二进制数据。适用于存储图像、视频、音频等。

BFile

最大长度是4GB,在数据库外部保存的大型二进制对象文件,最大长度是4GB。这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。 Oracle  可以读取、查询BFILE,但是不能写入,不参与事务。

 


CREATE TABLE F_STUDENT
(
  ID            NUMBER,
  NAME          VARCHAR2(12 BYTE),
  HEADERPIC     BLOB,
  STU_BIRTHDAY  DATE
)

2.jdbc连接数据库并写入数据

需要jar包:ojdbc6.jar
package com.bs.message;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;


public class test {
	public static void main(String[] args) throws ParseException {
		try {

			// 调用Class.forName()方法加载驱动程序
			Class.forName("oracle.jdbc.driver.OracleDriver");

		} catch (Exception e) {

			e.printStackTrace();

		}

		String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";

		// 调用DriverManager对象的getConnection()方法,获得一个Connection对象
		Connection conn;
		String tableName="f_student";
		FileInputStream fi = null;
		try {
			fi = new FileInputStream(new File("F:\\img\\7.jpg"));
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {

			conn = DriverManager.getConnection(url, "briup", "briup");

			conn.setAutoCommit(false);
			//创建一个Statement对象
			PreparedStatement ps = conn.prepareStatement("insert into " +
			  tableName + " (id,name,headerPic,stu_birthday) values (?,?,?,?)");
			ps.setLong(1, 1);
			ps.setString(2, "venbill");
			ps.setBlob(3, fi);
			//1900.1.0
			ps.setDate(4, new Date(94, 8, 19));
			ps.addBatch();
			ps.executeBatch();
			conn.commit();
			ps.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
			
		}
	}
}


3.异常处理

 java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.setBlob(ILjava/io/InputStream;)

原因:

setBlob(int, InputStream) was only added in Java 6. Your JDBC driver probably is out of date. Check if there's an updated version. 

oracle官网;

Downloadojdbc6.jar (2,739,670 bytes) - (SHA1 Checksum: a483a046eee2f404d864a6ff5b09dc0e1be3fe6c)
Certified with JDK 8, JDK 7 and JDK 6: It contains the JDBC driver classes except classes for NLS support in Oracle Object and Collection types.

刚开始用的ojdbc14,查看源码里面没有setBlob(int index,InputStream is)方法,换成ojdbc6完美解决。ojdbc6对应的是jdk6 、7、 8,而ojdbc14对应的是jdk1.5










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值