java 大字符串转为二进制流存入CLOB字段 JDBC方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 大字符串转为二进制流存入CLOB字段 JDBC方法相关的知识,希望对你有一定的参考价值。

String s = "大字符串";
byte[] bt = new byte[s.length()];
bt = dbField.getFieldValue().toString().getBytes();
ByteArrayInputStream iis = new ByteArrayInputStream(bt);
pstmt.setBinaryStream(i + 1, iis,bt.length);
这个方法看似正确啊,为什么不行啊。oracle报错,说不能更新这个字段值为NULL,意思就是转二进制没转明白,sql不好使。大侠们谁遇到过这个问题,帮帮我
提问时候写错了,程序中是s.getBytes().length,可是不行

我以前写程序发现:
oracle的数据库BLOB不能用来存储字符,改用NCLOB就OK了。

BLOB:用来存储无结构的二进制数据
CLOB:存储单字节字符数据。(别用来存中文喔。。。)
NCLOB:用来存储定宽多字节字符数据。
参考技术A 使用java.sql.Clob类型 参考技术B dbField.getFieldValue().toString().getBytes();
上面这个值有吗?取到了吗?
下面是我以前一个项目的

InputStream pic = new FileInputStream(dto.get(i).getLibPic());

sql = "INSERT INTO piclib (name,pic,sign,remark) VALUES (?,?,?,?)";

pstmt = con.prepareStatement(sql);
pstmt.setString(1, dto.get(i).getName());
pstmt.setBinaryStream(2,pic,(int)dto.get(i).getLibPic().length());本回答被提问者和网友采纳

如何将二进制文件存入Oracle数据库中

参考技术A 先把文件读取到内存,再以二进制格式保持到数据库中的大字段中(clob或clob)。
写大对象。

Java code

public static void main(String[] args)
// TODO Auto-generated method stub
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
OutputStream os = null;
FileInputStream fis = null;
int bs = 0;
try
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","---");
conn.setAutoCommit(false);
stat = conn.createStatement();
stat.executeUpdate("insert into t_video(id,video) values(1,empty_blob())");

rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
os = blo.getBinaryOutputStream();
bs = blo.getBufferSize();
fis = new FileInputStream("D:\\Temp\\MPlayer-CVS-20040808-K&K\\mplayer.exe");
byte[] buf = new byte[bs];
int length = 0;

while(true)

length = fis.read(buf);
if(length == -1) break;
os.write(buf,0,length);


os.close();
os = null;
fis.close();
fis = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
catch(Exception ex)
ex.printStackTrace();



读大对象

Java code

InputStream is = null;
FileOutputStream fos = null;
byte[] buf = null;
int bs = 0;

try
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","-");
conn.setAutoCommit(false);
stat = conn.createStatement();

rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
bs = blo.getBufferSize();
buf = new byte[bs];
int length = 0;
is = blo.getBinaryStream();
fos = new FileOutputStream("d:\\test.exe");

while(true)
length = is.read(buf);
if(length == -1) break;
fos.write(buf,0,length);


fos.close();
fos = null;
is.close();
is = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
...

以上是关于java 大字符串转为二进制流存入CLOB字段 JDBC方法的主要内容,如果未能解决你的问题,请参考以下文章

[19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)

关于JAVA~~~~ 如何将图片等大对象存入ORACLE中~~求详解!(代码)

CLOB和BLOB的区别

如何将二进制文件存入Oracle数据库中

orcal中的blob和clob

Oracle35BLOB字段和CLOB字段