您的位置:首页 > 数据库 > Oracle

Oracle中BLOB和CLOB数据的读写

2012-10-13 20:56 549 查看

1.Blob和Clob

Blob:二进制大对象存储单位,最大可以达到4G,通常用来存储图像、音频等二进制信息。
Clob:字符大对象存储单位,最大也是4G,通常用来存储大文本文件。

2.Blob数据的读写

a.Java

读取blob:

String sql_blob = "select blobname from table";
ResultSet rs_blob=null;
rs_blob = dao.queryForResultSet(sql_blob);
byte[] data = null;
if (rs_blob.next()) {

java.sql.Blob blob = rs_blob.getBlob(blobname);

InputStream inStream = blob.getBinaryStream();

try {

long nLen = blob.length();

int nSize = (int) nLen;

data = new byte[nSize];

inStream.read(data);

inStream.close();

} catch (IOException e) {
System.out.println("获取图片数据失败,原因:" + e.getMessage());
}
}

参考文章

写blob:

/**
* 描述: 添加某张表某条记录的content字段,此字段为 blob 型
* param: 表名;主键;数据;数据库连接
* return: 添加成功返回 true ;否则返回 false
* */
public static boolean setBlob(String tableName,int ID, String data,Connection conn) {
Statement statement = null;
ResultSet ret = null;
String insertBlob = "select content from " + tableName + " where id = '"+ID+"' for update ";
String flushBlob="update "+tableName+" set content=EMPTY_BLOB() where id="+ID;
boolean flg = false;
try {
statement = conn.createStatement();
statement.execute(flushBlob);//首先清空content字段
ret = statement.executeQuery(insertBlob);
oracle.sql.BLOB blob = null;
if (ret.next()) {
blob = ((OracleResultSet) ret).getBLOB(1);
}
OutputStream outstream = blob.getBinaryOutputStream();
byte[] data1 = data.getBytes();
outstream.write(data1, 0, data1.length);//就是这个地方出了问题,如果是修改,之前就有了长度为100字节的数据,而这次修改只有50字节数据,那么后面50个字节就不会被修改,仍然存在数据库中
outstream.flush();
outstream.close();
flg = true;
} catch (SQLException e1) {
e1.printStackTrace();
flg = false;
} catch (IOException e1) {
e1.printStackTrace();
flg = false;
} finally {
try {
if(statement != null) {
statement.close();
}
if(ret != null) {
ret.close();
}
}catch(Exception ex) {
ex.printStackTrace();
}
}

return flg;
}

参考文章

注:

数据库是Oracle10g版本为10.2.0, 在数据库中

java中通常使用的是通过jdbc驱动来连接数据库,oracle也不例外,因此必须下载一个Oracle驱动的jdbc需要去网上进行下载,名称为 ojdbc14(10g).jar。

a.C#

读取blob
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from table_withblob";
OracleDataReader odr_rt = cmd.ExecuteReader();
byte[] Photo = (byte[])odr_rt["blobname"];
写blob
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: