在我们的程序开发当中,经常会用到java.sql.Blob、byte[]、InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们之间互换的util.
一、byte[]=>Blob
我们可以通过Hibernate提供的表态方法来实现如:
org.hibernate.Hibernate.Hibernate.createBlob(new byte[1024]);
二、Blob=>byte[] 目前没有找到好一点的API提供,所以只能自已来实现。
示例如下:
Java代码
/**
* 把Blob类型转换为byte数组类型
* @param blob
* @return
*/
private byte[] blobToBytes(Blob blob) {
BufferedInputStream is = null;
try {
is = new BufferedInputStream(blob.getBinaryStream());
byte[] bytes = new byte[(int) blob.length()];
int len = bytes.length;
int offset = 0;
int read = 0;
while (offset < len && (read = is.read(bytes, offset, len - offset)) >= 0) {
offset += read;
}
return bytes;
} catch (Exception e) {
return null;
} finally {
try {
is.close();
is = null;
} catch (IOException e) {
return null;
}
}
}
三、InputStream=>byte[]
Java代码
private byte[] InputStreamToByte(InputStream is) throws IOException {
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
int ch;
while ((ch = is.read()) != -1) {
bytestream.write(ch);
}
byte imgdata[] = bytestream.toByteArray();
bytestream.close();
return imgdata;
}
四、byte[] => InputStream byte[]到inputStream之间的转换很简单:
InputStream is = new ByteArrayInputStream(new byte[1024]);
五、InputStream => Blob
可通过Hibernate提供的API:Hibernate.createBlob(new FileInputStream(" 可以为图片/文件等路径 "));
六、Blob => InputStream
Blog转流,可通过提供的API直接调用:new Blob().getBinaryStream();
以上片段可作为读者参考。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sukyle/archive/2010/05/29/5632713.aspx
分享到:
相关推荐
为了解决这一问题,我们需要采用一种方法来安全地实现这两种类型的相互转换。 #### 二、解决方案 为了解决 WebLogic 下 Oracle CLOB 类型转换的问题,可以通过反射机制来调用 `weblogic.jdbc.wrapper.Clob_oracle_...
在Java中,读取Oracle数据库中的BLOB字段通常通过`java.sql.Blob`类实现。这个类提供了多种方法来处理BLOB数据,例如`getBytes(long pos, int length)`用于获取BLOB的一部分或全部内容。以下是一个简单的示例: ```...
java.sql.Blob blob = res.getBlob("zp"); InputStream inStream = blob.getBinaryStream(); try { // 获取图片数据长度 long nLen = blob.length(); int nSize = (int) nLen; data = new byte[nSize]; ...
在Java编程中,数据存储和传输常常涉及到不同类型的数据转换,特别是在数据库操作中,与二进制大数据相关的类型如`byte[]`(字节数组)和`Blob`(Binary Large Object)之间的转换尤为常见。本篇文章将详细讲解如何...
InputStream is = blob.getBinaryStream(); Files.copy(is, Paths.get("recovered_" + mp3File.getName()), StandardCopyOption.REPLACE_EXISTING); } } } ``` 总结,通过上述步骤,我们成功地利用Java将MP3...
4. **读取BLOB数据**:通过`ResultSet`获取到`BLOB`对象,并将其转换为`InputStream`进行读取。 ```java if (rs.next()) { oracle.sql.BLOB content = (oracle.sql.BLOB) rs.getBlob("content"); ...
Blob是Java.sql包中的一个接口,它定义了用于操作大对象的方法。在关系型数据库中,Blob类型通常用于存储大于数据库系统所能处理的普通字节串的数据。 1. **插入Blob数据**: 在Java中,我们需要先创建一个Blob...
这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...
byte[] imageBytes = blob.getBytes(1, (int) blob.length()); outputStream.write(imageBytes); outputStream.flush(); System.out.println("图片已成功从数据库读取"); } } catch (SQLException | ...
- 将结果集中的BLOB对象转换为适当的类型(如`oracle.sql.BLOB`或`weblogic.jdbc.vendor.oracle.OracleThinBlob`)。 - **读取BLOB数据并写入文件:** - 获取BLOB对象的输入流`getBinaryInputStream()`。 - 创建...
在Java编程中,Blob(Binary ...综上所述,Java中的Blob字段操作涉及到数据库连接、SQL预处理、数据转换等技术,是存储和检索非结构化数据的关键。理解并熟练掌握这些步骤,将有助于实现高效、可靠的文件存储解决方案。
oracle.sql.BLOB imgBlob = (oracle.sql.BLOB) rs.getBlob(3); ``` ##### 3.5 将BLOB数据写入文件 最后一步是将BLOB数据写入到本地文件系统中的某个文件。这通常通过`InputStream`和`OutputStream`对象来实现。 ``...
在Java的持久化框架Hibernate中,BLOB和CLOB是用来处理大数据对象(Binary Large Object和Character Large Object)的。这两个类型常用于存储图像、视频、大文本等数据,因为它们可以容纳超过数据库标准列大小限制的...
### 使用Java向Oracle数据库插入图片(BLOB)文件 #### 一、概述 本文将详细介绍如何使用Java通过JDBC向Oracle数据库中插入图片文件的方法。此过程涉及到的主要技术包括Java编程语言、Oracle数据库以及JDBC驱动。...
写入BLOB数据的过程相对复杂,因为它涉及到将Java对象转换为二进制流。通常我们会先将二进制数据写入一个临时文件,然后再读取这个文件来创建Blob对象: ```java // 假设byteData是待存入数据库的二进制数据 ...
在Hibernate中,Blob对象与Java的java.sql.Blob接口相对应,用于操作这些大对象。 1. **配置Hibernate映射文件(Hibernate Mapping File)** 在Hibernate的映射文件(.hbm.xml)中,我们需要为Blob字段定义一个...
2. **预编译SQL语句**:为了插入或更新包含BLOB的记录,我们需要一个能接受BLOB值的SQL语句。使用`PreparedStatement`来预编译SQL,这样可以提高性能并防止SQL注入攻击。 ```java String sql = "INSERT INTO TABLE_...
oracle.sql.BLOB blob = (BLOB) rs.getBlob(2); OutputStream os = blob.getBinaryOutputStream(); FileInputStream fi = new FileInputStream("E:\\test.mp3"); byte[] buff = new byte[1024]; int len = fi....
java.sql.Blob blob = rs.getBlob("BLOBATTR"); InputStream inStream = blob.getBinaryStream(); byte[] data = new byte[inStream.available()]; inStream.read(data); inStream.close(); } inStream.close...
### MySQL、SQL Server、Oracle 三种数据库的大对象存取解析 #### 一、MySQL 大对象存取 在 MySQL 中,处理大对象通常涉及到 Blob 类型。Blob 是 Binary Large Object 的缩写,用来存储二进制数据。MySQL 提供了四...