int chunk = blob.getChunkSize();
//getChunkSize()是什么意思?
byte[] buffer = new byte[chunk];
int length = -1;
while ((length = instream.read(buffer)) != -1)
outstream.write(buffer, 0, length);//写入文件
//此时,outstream仅仅是一个输出流而已,怎么写到文件里面呢?
instream.close();
outstream.close();
对于以上问题,请指教,谢谢!
---------------------------------------------------------------
---------------------------------------------------------------
对于冷血狐兄的回答,有一些问题,也想请教。
首先是Getting BLOB and CLOB Locators from a Result Set
// Select LOB locator into standard result set.
ResultSet rs =stmt.executeQuery ("SELECT blob_col, clob_col FROM lob_table");
//以上代码我在运行时,出错,错误信息是:找不到字段:blob_col,clob_col,当然,我是用我的字段,但是,也不行,用*可以,为什么?好像不能用字段名似的。
while (rs.next())
{// Get LOB locators into Java wrapper classes.
oracle.jdbc2.Blob blob = (oracle.jdbc2.Blob)rs.getObject(1);
oracle.jdbc2.Clob clob = (oracle.jdbc2.Clob)rs.getObject(2);
[...process...]
}
然后是Read BLOB data from BLOB locator.
InputStream byte_stream = my_blob.getBinaryStream();
byte [] byte_array = new byte [10];
int bytes_read = byte_stream.read(byte_array);
和Writing BLOB Data
java.io.OutputStream outstream;
// read data into a byte array
byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// write the array of binary data to a BLOB
outstream = ((BLOB)my_blob).getBinaryOutputStream();
outstream.write(data);
还有Passing a BLOB Locator to a Prepared Statement
OraclePreparedStatement ops = (OraclePreparedStatement)conn.prepareStatement
"INSERT INTO blob_table VALUES(?)");
ops.setBLOB(1, my_blob);
ops.execute();
----------------------------------------------------------
----------------------------------------------------------
以下是我这两天的结果,有不对的地方,请指教。谢谢!
//以下是需要用到的类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.sql.*;
import java.io.*;
import oracle.sql.BLOB;
import oracle.jdbc.*;
File file=new File("VC.DOC");
InputStream is=new FileInputStream(file);//创建输入流,将外部文件输入到InputStream 中。
System.out.print(file.length());
PreparedStatement pstmt=conn.prepareStatement("INSERT INTO TEST VALUES (?,?)");
pstmt.setInt(1,(int)file.length());
pstmt.setBinaryStream(2,is,(int)file.length());
pstmt.executeUpdate();//将文件流插入到数据库中。
pstmt.close();
//以下是从库中读取文件。
ResultSet rset=stmt.executeQuery("SELECT * from test");
while (rset.next())
{// Get LOB locators into Java wrapper classes.
int id=rset.getInt(1);//获取文件长度。
BLOB blob=((OracleResultSet)rset).getBLOB(2);//获取文件字段。
// int chunk=blob.getChunkSize();
int chunk=id;
byte [] buffer=new byte[chunk];
System.out.println(chunk);
这个例子我记得已经发到你上个帖子上了难道读不出来吗?
有什么问题沟通
(三)用jdbc处理lob
exmple 4.
首先是Getting BLOB and CLOB Locators from a Result Set
// Select LOB locator into standard result set.
ResultSet rs =stmt.executeQuery ("SELECT blob_col, clob_col FROM lob_table");
while (rs.next())
{// Get LOB locators into Java wrapper classes.
oracle.jdbc2.Blob blob = (oracle.jdbc2.Blob)rs.getObject(1);
oracle.jdbc2.Clob clob = (oracle.jdbc2.Clob)rs.getObject(2);
[...process...]
}
然后是Read BLOB data from BLOB locator.
InputStream byte_stream = my_blob.getBinaryStream();
byte [] byte_array = new byte [10];
int bytes_read = byte_stream.read(byte_array);
和Writing BLOB Data
java.io.OutputStream outstream;
// read data into a byte array
byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// write the array of binary data to a BLOB
outstream = ((BLOB)my_blob).getBinaryOutputStream();
outstream.write(data);
还有Passing a BLOB Locator to a Prepared Statement
OraclePreparedStatement ops = (OraclePreparedStatement)conn.prepareStatement
"INSERT INTO blob_table VALUES(?)");
ops.setBLOB(1, my_blob);
ops.execute();