conn.setAutoCommit(false); stmt = conn.createStatement(); /* * Execute the SELECT statement */ rs = stmt.executeQuery(query); if(rs.next()) { /* * Extract the BLOB data to a file on the local file system. */ blob = ((OracleResultSet)rs).getBLOB("FileData"); is = blob.getBinaryStream(); final String fileName = rs.getString("FileName"); final String filePath = path + fileName; os = new FileOutputStream(filePath); final int bufferSize = blob.getBufferSize(); final byte[] buffer = new byte[bufferSize]; int bytesRead = 0; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } } 详细:参考:http://hi.baidu.com/lxcrystal/blog/item/ec18cece2a4f470393457ef3.html
现在想知道JAVA是怎么一个处理流程,由于文本文件比较多,比较关心字符集问题.
stmt = conn.createStatement();
/*
* Execute the SELECT statement
*/
rs = stmt.executeQuery(query);
if(rs.next()) {
/*
* Extract the BLOB data to a file on the local file system.
*/
blob = ((OracleResultSet)rs).getBLOB("FileData");
is = blob.getBinaryStream();
final String fileName = rs.getString("FileName");
final String filePath = path + fileName;
os = new FileOutputStream(filePath);
final int bufferSize = blob.getBufferSize();
final byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
}
详细:参考:http://hi.baidu.com/lxcrystal/blog/item/ec18cece2a4f470393457ef3.html
用流保存二进制文件(包括文本文件)不用考虑字符集吧
另一种是以字符形式存储的。
数据库要存储二进制数据,其数据库的列的属性必须是二进制类型的,如MySQL中,类型为BINARY和VARBNARY的列以二进制形式存储数据。
因为二进制一般都是字节数组,所以,要使用动态的SQL语句,要执行动态的SQL语句,必须使用PerparedStatement,
它的setBytes方法给未确定部分赋字节数组值。然后调用executeUpdate方法遍完成二进制数据的写入。同样道理,要从数据库中读取二进制数据的时候,
遍历结果集调用ResultSet的getBytes方法。获得字节数组(也就是二进制数组)。二进制数组一般存储比较大的数据,如图片,影视文件。
如果数据库列属性是Blob的,获得结果集后调用ResultSet的getBlob方法,获得Blob数据,一个java.sql.Blob对象。Blob类的getBinaryStream方法获得Blob数据的字节输入流。便可以读取Blob数据。累死我了....................呼!