读取BLOB数据格式的操作

package org.smart.storage.server;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


import com.itextpdf.text.pdf.PdfReader;


import oracle.sql.BLOB;


public class Test {


public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException{
PdfReader reader = new PdfReader("D:\\asd2.pdf");
int numberOfPages = reader.getNumberOfPages();
System.out.println(numberOfPages);

/*
* 从ORACLE数据库中读取BLOB数据类型的文件
* BLOB为二进制流的储存格式
*/
Class.forName("oracle.jdbc.OracleDriver");

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.51.24.20:1521:orcl" , "gzj_da" , "gzj_da");

String sql = "select * from GZJ.APP_FUJIAN where fjid in (select fujianid from GZJ.APP_FUJIANMAIN WHERE archiveid='8ab398845b7f9abe015ba71f960d0bc2')";

Statement statement = conn.createStatement();

ResultSet rs = statement.executeQuery(sql);
int i = 1;
while(rs.next()){
String string = rs.getString("FJID");
System.out.println(string);

Blob blob = rs.getBlob("FILEBLOB");
InputStream is = blob.getBinaryStream();

System.out.println(blob==null);

File file = new File("D:/fujian/WU"+i+".txt");

FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte byt[]  = new byte[1024];
while((len = is.read(byt)) != -1){
fos.write(byt,0,len);
}
i++;
}
statement.close();
conn.close();

/**
* 把文件以二进制流的形式写入到数据库中
* 写入到BLOB格式的格式中
* 中心思想:先写入oracle.sql.BLOB.getEmptyBLOB()来占个地方,然后再"流"来个狸猫换太子
*/
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.3.128:1521:XE", "hr", "hr");
conn.setAutoCommit(false);
String sql = "insert into APP_FUJIAN(FJID, FILEBLOB, CID, YFILENAME, FILEDIR)";
sql += "values(?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "YI5");
ps.setBlob(2, oracle.sql.BLOB.getEmptyBLOB());
ps.setString(3, "1");
ps.setString(4, "wenjian");
ps.setString(5, "2017");
ps.executeUpdate();
sql="select FILEBLOB from APP_FUJIAN where fjid='YI5'";
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
oracle.sql.BLOB blob = null;
while(rs.next()){

blob = (oracle.sql.BLOB) rs.getBlob(1);
OutputStream os = blob.setBinaryStream(0);
InputStream is = new FileInputStream("D:\\fujian\\YI5.xls");
int i = 0;
//byte[] buffer  = new byte[2];
while((i = is.read()) != -1){
os.write(i);
}
is.close();
os.flush();
os.close();
}
conn.commit();
conn.setAutoCommit(true);
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}

conn.close();

}


}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Blob URL 是 Blob 对象 URL 或 blob: 协议 URL 的简称,Blob 对象是一种二进制数据类型。在浏览器中,我们可以通过 JavaScript 从 Blob URL 读取数据。 要读取 Blob URL 的数据,我们可以使用以下步骤: 1. 使用 XMLHttpRequest 对象创建一个 HTTP 请求。 2. 将请求的 responseType 设置为 blob,以告诉浏览器我们需要获取二进制数据。 3. 使用 open() 方法设置请求的 URL、请求方式和异步标志。 4. 使用 send() 方法发送 HTTP 请求。 5. 在请求的 onload 事件中,使用 FileReader 对象读取 Blob 数据。 6. 在 FileReader 的 onload 事件中,获取读取数据并进行操作。 以下是一个读取 Blob URL 数据的简单示例: ```javascript const xhr = new XMLHttpRequest(); xhr.open('GET', blobUrl, true); xhr.responseType = 'blob'; xhr.onload = () => { if (xhr.status === 200) { const reader = new FileReader(); reader.addEventListener('load', () => { const data = reader.result; // 读取数据 // 在这里进行数据操作 }); reader.readAsText(xhr.response); } }; xhr.send(); ``` 在这个示例中,我们创建了一个 XMLHttpRequest 对象,设置了请求方式、URL 和异步标志,并将 responseType 设置为 blob。然后,在请求的 onload 事件中,我们使用 FileReader 对象读取 Blob URL 数据。最后,在 FileReader 的 onload 事件中,我们可以获取读取数据并对其进行处理。 总之,通过以上步骤,我们可以很容易地从 Blob URL 中读取数据,并对其进行操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值