oracle Sql-blobclob

鲜于仰岳
2023-12-01

CLOB: 用来存储单字节的字符数据

BLOB: 用于存储二进制数据

 ------------------------------------------------------------------------------------------------

API:

clob

 

 Reader getCharacterStream()
          以 java.io.Reader 对象形式(或字符流形式)检索此 Clob 对象指定的 CLOB

 

Writer setCharacterStream(long pos)
          检索用于将 Unicode 字符流写入此 Clob 对象表示的 CLOB 值中(位置 pos 处)的流。

 

long length()
          检索此 Clob 对象指定的 CLOB 值中的字符数。

 

 

blob

 

 

InputStream getBinaryStream()
          以流的形式检索此 Blob 实例指定的 BLOB 值。

 

byte[] getBytes(long pos, int length)
          以字节数组的形式检索此 Blob 对象表示的全部或部分 BLOB 值。
 long length()
          返回由此 Blob 对象指定的 BLOB 值中的字节数。

 

OutputStream setBinaryStream(long pos)
          检索用于写入此 Blob 对象表示的 BLOB 值的流

 

 

 

----------------------------------------------------------------------

JDBC

CLOB Java代码

//获得数据库连接

Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false);

Statement st = con.createStatement(); //不需要“for update”

ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");

if (rs.next()) {

java.sql.Clob clob = rs.getClob("CLOBATTR");

Reader inStream = clob.getCharacterStream();

char[] c = new char[(int) clob.length()]; //读取字节数

inStream.read(c);

//data是读出并需要返回的数据,类型是String data = new String(c);

inStream.close();

}

inStream.close();

con.commit();

con.close();

 

BLOB java 代码

//获得数据库连接

Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false);

Statement st = con.createStatement(); //不需要“for update”

ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");

if (rs.next()) {

java.sql.Blob blob = rs.getBlob("BLOBATTR");

InputStream inStream = blob.getBinaryStream();

 //data是读出并需要返回的数据,类型是

byte[] data = new byte[input.available()]; //input.available()字节长度

inStream.read(data);

inStream.close();

 }

inStream.close();

con.commit();

con.close();

 

 

JDBC SQL插入语句:

 CLOB java 代码

//获得数据库连接

Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false);

Statement st = con.createStatement();

//插入一个空对象empty_clob()

 st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");

//锁定数据行进行更新,注意“for update”语句

ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");

 

if (rs.next()) {

//得到java.sql.Clob对象后强制转换为oracle.sql.CLOB

oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");

Writer outStream = clob.getCharacterOutputStream();

//data是传入的字符串,定义:String data

char[] c = data.toCharArray();

outStream.write(c, 0, c.length);

}

outStream.flush();

outStream.close();

con.commit();

con.close();

 

 

BLOB java 代码

 

//获得数据库连接

Connection con = ConnectionFactory.getConnection(); con.setAutoCommit(false);

Statement st = con.createStatement();

 

//插入一个空对象empty_blob()

st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");

 

//锁定数据行进行更新,注意“for update”语句

ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");

if (rs.next()) {

 

//得到java.sql.Blob对象后强制转换为oracle.sql.BLOB

oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");

OutputStream outStream = blob.getBinaryOutputStream();

 

//data是传入的byte数组,定义:byte[] data

outStream.write(data, 0, data.length);

}

outStream.flush();

outStream.close();

con.commit();

con.close();

 

---------------------------------------------------------------------

Hibernate保存大字段:

blob:

PO: import org.apache.struts.upload.FormFile;

属性:private FormFile file = null;

byte[] fileData = po.getFile().getFileData();

String fileName = po.getFile().getFileName();

PubInfoFiles pubInfoFiles = new PubInfoFiles();

pubInfoFiles.setFileName(fileName);//private Blob file;

pubInfoFiles.setFile(Hibernate.createBlob(fileData));

pubInfoFiles.setCreateDate(new Date());

getPubFileService().savePo(pubInfoFiles);

 

//一般保存PO的方法

clob:

在映射文件中定义成org.springframework.orm.hibernate3.support.ClobStringType类型,在po中定义成String类型

 

<property name="requestContent" type="org.springframework.orm.hibernate3.support.ClobStringType"><column name="REQUEST_CONTENT"></column></property>

 

private String requestContent;操作同String类似。

 

 

 

输出eg

 

//将图片读进输入流

FileInputStream fis = new FileInputStream("c:\\a.jpg");

//转成Blob类型

photo = Hibernate.createBlob(fis);

user.setPhoto(photo);

xx.save(user);

 

try {

//从数据库中要读取出来

InputStream is = user.getPhoto().getBinaryStream();

//在写到一个图片格式的文件里

FileOutputStream fos = new FileOutputStream("c:\\l.jpg");

 

byte[] buffer = new byte[1024];

int len = 0;

 //从数据库中读取到指定的字节数组中

while((len = is.read(buffer) )!= -1){

 

//从指定的数组中读取,然后输出来,所以这里buffer好象是连接inputStreamoutputStream的一个东西

 fos.write(buffer,len);

 

} catch (FileNotFoundException e) {

 

e.printStackTrace(); } catch (SQLException e) {

e.printStackTrace(); } catch (IOException e) {

e.printStackTrace(); }

 

session.close();

---------------------------------------------------------------------

oracle sql语句:

select STREAM_DATA from pub_info_files

STREAM_DATA:blob类型

insert into T (image) values( (select STREAM_DATA from pub_info_files));

 

if调用函数:select 函数名(STREAM_DATA) from pub_info_files

 

 类似资料: