当前位置: 技术问答>java相关
java.sql.Blob为什么不可以setBinaryStream的,只可以get,如果这样的话,在以前的jdbc版本中是怎样用BLOB数据类型来对表进行操作的,怎
来源: 互联网 发布时间:2015-09-05
本文导语: java.sql.Blob为什么不可以setBinaryStream的,只可以get,如果这样的话,在以前的jdbc版本中是怎样用BLOB数据类型来对表进行操作的,怎样应用的? | java.sql.Blob只是个接口而已,而且看来就是方便...
java.sql.Blob为什么不可以setBinaryStream的,只可以get,如果这样的话,在以前的jdbc版本中是怎样用BLOB数据类型来对表进行操作的,怎样应用的?
|
java.sql.Blob只是个接口而已,而且看来就是方便取数据用的,所以没有提供setBinaryStream的方法。你要存Blob字段,jdbc提供了另外的方法啊,如
PreparedStatement的setBinaryStream(int parameterIndex, InputStream x, int length)、setBytes(int parameterIndex, byte[] x)和setBlob(int i, Blob x) 。不过setBlob(int i, Blob x) 中实现Blob接口的类标准jdk中并没有,你就只有通过从jdbc Driver厂商开发提供了,例如oracle.sql.BLOB。
呵呵,因为那些厂商开发的冬冬,我都找不到详细的API文档,所以,都不知道怎么具体去构造,只好用前两种。
PreparedStatement的setBinaryStream(int parameterIndex, InputStream x, int length)、setBytes(int parameterIndex, byte[] x)和setBlob(int i, Blob x) 。不过setBlob(int i, Blob x) 中实现Blob接口的类标准jdk中并没有,你就只有通过从jdbc Driver厂商开发提供了,例如oracle.sql.BLOB。
呵呵,因为那些厂商开发的冬冬,我都找不到详细的API文档,所以,都不知道怎么具体去构造,只好用前两种。
|
set use :
pstmt = conn.PreparedStatement("insert table(blobfield,....) values(?,...)");
pstmt.setObject(1,"blob String");
pstmt.execute();
get use:
resultSet.getString("BlobField");
that is all ,enjoy.
pstmt = conn.PreparedStatement("insert table(blobfield,....) values(?,...)");
pstmt.setObject(1,"blob String");
pstmt.execute();
get use:
resultSet.getString("BlobField");
that is all ,enjoy.
|
要写入内容到Blob,请看下面的代码片段:
...
ResultSet lobDetails = stmt.executeQuery(
"SELECT content FROM webblob WHERE name = '"+name+"' FOR UPDATE");
if(lobDetails.next()) {
Blob mapBlob = lobDetails.getBlob(1);
OutputStream blobOutputStream = ((oracle.sql.BLOB)mapBlob).getBinaryOutputStream();
File mapFile = new File(filename);
InputStream sampleFileStream=new FileInputStream(mapFile);
byte[] buffer = new byte[10* 1024];
int nread = 0;
while ((nread= sampleFileStream.read(buffer)) != -1)
blobOutputStream.write(buffer,0,nread);
sampleFileStream.close();
blobOutputStream.close();
System.out.println("Done insert Blob Data!");
...
ResultSet lobDetails = stmt.executeQuery(
"SELECT content FROM webblob WHERE name = '"+name+"' FOR UPDATE");
if(lobDetails.next()) {
Blob mapBlob = lobDetails.getBlob(1);
OutputStream blobOutputStream = ((oracle.sql.BLOB)mapBlob).getBinaryOutputStream();
File mapFile = new File(filename);
InputStream sampleFileStream=new FileInputStream(mapFile);
byte[] buffer = new byte[10* 1024];
int nread = 0;
while ((nread= sampleFileStream.read(buffer)) != -1)
blobOutputStream.write(buffer,0,nread);
sampleFileStream.close();
blobOutputStream.close();
System.out.println("Done insert Blob Data!");
|
BLOB是不能设置的,一般在用到对表中BLOB字段操作时,是用BYTE[]进行存储的。最初设计BLOB时是考虑为了能够存储大型数据,但是如果设置BLOB的话,可以对BYTE[]进行修改,然后存库,在取出,这样就达到set...的目的了。!
|
关注,我也想知道,帮你upup
|
学习
|
学习中!
|
楼上的真是搞笑,用blob字段来存放字符串,杀鸡用牛刀啊。
|
获益不浅,很好很好。