1.创建表
大型对象(LOB)数据类型
Clob
最大4G,存储单字节字符型数据。适用于存储超长文本。
Nclob
最大4G,存储多字节国家字符型数据。适用于存储超长文本。
Blob
最大4G,存储二进制数据。适用于存储图像、视频、音频等。
BFile
最大长度是4GB,在数据库外部保存的大型二进制对象文件,最大长度是4GB。这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。 Oracle
CREATE TABLE F_STUDENT
(
ID NUMBER,
NAME VARCHAR2(12 BYTE),
HEADERPIC BLOB,
STU_BIRTHDAY DATE
)
2.jdbc连接数据库并写入数据
需要jar包:ojdbc6.jarpackage 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官网;
ojdbc6.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