DB2中对BLOB对象的写入和读取--JAVA语言实现
作者:魏华超 weihuachao@sina.com
package
net.qysoft;
import
java.io.File;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.SQLException;
/**
* java
中对Blob数据的操作数据库的创建代码:
* (1)db2 => create table blobTest ( id
int not null generated always as identity, image
blob )
*添加用户java,密码java
* (2)
db2=>! net
* user java java /add java分配权限
*(3)db2 => grant
select,insert,update,delete on
* table weihuachao.blobTest to user java
*
*
* @author weihuachao
* 以下代码在microsoft 2003
系统,DB2 9.0中测试成功.
*
*/
//类的定义开始------------------------------------------------------------
public class Test {
public static void
main(String[] args) throws Exception {
Test
test = new Test();
Connection conn =
test.createConnection();
//
Blob对象的插入的方法:
try {
//
创建插入语句.
java.sql.PreparedStatement
preparedStatement = conn
.prepareStatement("insert
into weihuachao.blobTest(image)values(?)");
//创建文件对象:
File file=new
File("c:/a.jpg");
//
创建流对象:
java.io.BufferedInputStream
imageInput = new java.io.BufferedInputStream(
new
java.io.FileInputStream(file));
//参数赋值:
preparedStatement.setBinaryStream(1,
imageInput,(int) file.length());
//执行语句
preparedStatement.executeUpdate();
//------------------------------------------------------------------
//Blob的读取工作:
java.sql.Statement
st=conn.createStatement();
java.sql.ResultSet
rs=st.executeQuery("select image from
weihuachao.blobTest");
while(rs.next())
{
//读取Blob对象
Blob
blob= (Blob) rs.getBlob(1);
//Blob对象转化为InputStream流
java.io.InputStream
inputStream =blob.getBinaryStream();
//要写入的文件
File
fileOutput = new File("c:/backa.jpg");
//文件的写入流的定义
FileOutputStream
fo = new FileOutputStream(fileOutput);
int
c;
//读取流并写入到文件中
while
((c = inputStream.read()) != -1)
fo.write(c);
//流的关闭:
fo.close();
}
}
catch (SQLException e) {
//
TODO 自动生成 catch 块
e.printStackTrace();
}catch(java.io.FileNotFoundException
ex)
{
ex.printStackTrace();
}catch(java.io.IOException
ex)
{
ex.printStackTrace();
}
finally
{
try {
conn.close();
} catch
(SQLException e) {
//
TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
/**
* 定义数据库连接的方法
*
* @return
*/
private Connection createConnection() {
Connection conn = null;
try {
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
conn
= java.sql.DriverManager.getConnection("jdbc:db2:sample",
"java",
"java");
} catch
(SQLException ex1) {
ex1.printStackTrace();
} catch
(ClassNotFoundException ex) {
ex.printStackTrace();
}
return conn;
}
}//结束.
总结: JAVA
对DB2中的BLOB对象的操作,主要是使用流的技术实现.对BLOB的实现主要步骤有:
(1)定义要写入的文件 File
file=new File("c:/a.jpg");
(2)定义文件的写入流
java.io.BufferedInputStream imageInput = new
java.io.BufferedInputStream(
new
java.io.FileInputStream(file));
(3)使用函数写入:
preparedStatement.setBinaryStream(1,
imageInput,(int) file.length());
(4)执行SQL语句:
对BLOB的读取采取的步骤有:
(1)读取Blob的对象: Blob
blob= (Blob) rs.getBlob(1);
(2)把Blob的对象转化为流:
java.io.InputStream inputStream =blob.getBinaryStream();
(3)定义要写入的文件
File
fileOutput = new File("c:/backa.jpg");
(4)文件的写入流的定义
FileOutputStream
fo = new FileOutputStream(fileOutput);
(5)写入文件(流的写入技术,就不多讲了)
int
c;
while
((c = inputStream.read()) != -1)
{
fo.write(c);
}
//END
分享到:
相关推荐
在这个教程中,我们将探讨如何在DB2数据库中使用Java进行BLOB对象的写入和读取。 首先,让我们了解什么是BLOB。BLOB是数据库中用来存储二进制大对象的数据类型,它可以容纳任何大小的二进制数据,如图像、音频文件...
通过`XMLPARSE`函数,可以实现对XML数据的规范化处理,确保数据的完整性及正确性。 - **基本语法**: ```sql XMLPARSE(document XML_STRING [ AS DATATYPE [ PRESERVE WHITESPACE ] ]) ``` - **示例**: ```...
在部署Quartz时,确保正确配置了Scheduler的数据库连接信息,这样Quartz才能正确地读取和写入这些表。同时,为了保证系统的稳定运行,建议定期备份这些表,以便在出现问题时能够快速恢复。 总结,创建Quartz表是...
7. **性能优化**:处理CLOB数据时,ODI可能会采用分块读取和写入策略以提高性能,避免一次性加载整个大对象导致内存溢出。用户需要根据数据量和系统资源调整这些参数。 8. **注意事项**:由于CLOB数据的大小,可能...
数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询) 数据控制语言Data Controlling Language(DCL),用来...
1. **高性能数据访问**:UniDAC采用优化的数据库访问机制,实现了低级别数据库API的直接调用,从而提供高速的数据读取和写入性能。 2. **广泛的数据库支持**:除了上述提到的数据库,UniDAC还兼容Firebird、...
在Java数据库连接(JDBC)4.0版本中,一个重要的新特性是对XML数据类型的原生支持。这一特性使得Java程序员能够更方便地在数据库中存储和检索XML文档,而无需进行繁琐的类型转换。在SQL 2003标准中引入XML数据类型后...