欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析使用jdbc,hibernate處理clob/blob字段的詳解

 更新時(shí)間:2013年05月16日 09:39:13   作者:  
本篇是對使用jdbc,hibernate處理clob/blob字段進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

(1)不同數(shù)據(jù)庫中對應(yīng)clob,blob的類型:
mysql中 : clob對應(yīng)text  blob對應(yīng)blob
db2/oracle中 clob對應(yīng)clob blob對應(yīng)blob

(2)domain中對應(yīng)類型:
clob 對應(yīng) String   blob 對應(yīng) byte[]
clob 對慶 java.sql.Clob blob 對應(yīng) java.sql.Blob

(3)hibernate配置文件中對應(yīng)類型:
clob > clob   blob > binay

也可以直接使用數(shù)據(jù)庫提供類型,例如:oracle.sql.Clob,oracle.sql.Blob。

2、jdbc操作clob (以oracle為例)
首先操作clob/blob不像操作varchar類型那樣簡單,插入步驟一般為兩步:第一步插入一個(gè)空值,第二步鎖住此行,更新clob/blob字段.

復(fù)制代碼 代碼如下:

//插入空值
conn.setAutoCommit(false);
String sql = "insert into file(name,file_content) values("jack",EMPTY_CLOB());
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
//鎖住此行
String sql = "select file_content from file where name='jack' for update";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
oracle.sql.Clob clob = (oracle.sql.Clob)rs.getClob(1);
java.io.OutputStream writer = clob.getAsciiOutputStream();
byte[] temp = newFileContent.getBytes();
writer.write(temp);
writer.flush();
writer.close();
//
pstmt.close();


讀取內(nèi)容:
oracle.sql.Clob clob = rs.getClob("file_content");
if(null!=clob)
{
     Reader is = clob.getCharacterStream();
     BufferedReader br = new BufferedReader(is);
     String s = br.readLine();
    while (s != null)
    {
        content += s + "<br>"; 
        s = br.readLine();
    }
}


3、jdbc操作blob
復(fù)制代碼 代碼如下:

conn.setAutoCommit(false);
String sql = "insert into photo(name,photo) values("jack",empty_blob());
pstmt = conn.prepareStatement(sql);
pstmt = conn.executeUpdate();
//
sql = "select photo from photo where name='jack'";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
if(rs.next())
     oracle.sql.Blob blob = (oracle.sql.Blob)rs.getBlob(1);
//write to a file
File file = new File("c:\\test.rar");
FileInputStream fin = new FileInputStream(file);
OutputStream out = blob.getBinaryOutputStream();
int count = -1, total = 0;
byte[] data = new Byte[blob.getBufferSize()];
while ((count = fin.read(data)) != -1)
{
         total += count;
         out.write(data, 0, count);
}

4、hibernateth處理clob
復(fù)制代碼 代碼如下:

MyFile file = new Myfile();
file.setName("jack");
file.setContent(hibernate.createClob(""));
session.save(file);
session.flush();
session.refresh(file,LockMode.UPGRADE);
oracle.sql.Clob clob = (oracle.sql.Clob)file.getContent();
Writer pw = clob.getCharacterOutputStream();
pw.write(longText);//寫入長文本
pw.close();
session.close();

5、使用hibernate處理blob:
復(fù)制代碼 代碼如下:

原理基本相同:
Photo photo = new Photo();
photo.setName("jack");
photo.setPhoto(hibernate.createBlob(""))://放一個(gè)空值
session.save(photo);
session.flush();
//
session.refresh(photo,LockMode.UPGRADE); //鎖住此對象
oracle.sql.Blob blob = photo.getPhoto();//取得此blob的指針
OutputStream out = blob.getBinaryOutputStream();   
//寫入一個(gè)文件
File f = new File("c:\\test.rar");
FileInputStream fin = new FileInputStream(f);   
int count = -1, total = 0;
byte[] data = new byte[(int)fin.available()];
out.write(data);     
fin.close();
out.close();
session.flush();

相關(guān)文章

  • 官方詳解HDFS?Balancer工具主要調(diào)優(yōu)參數(shù)

    官方詳解HDFS?Balancer工具主要調(diào)優(yōu)參數(shù)

    這篇文章主要為大家介紹了HDFS?Balancer工具主要調(diào)優(yōu)參數(shù)的?官方詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 淺析Java中局部變量與成員變量同名解決技巧

    淺析Java中局部變量與成員變量同名解決技巧

    在剛開始學(xué)習(xí)Java的時(shí)候,就了解了Java基礎(chǔ)中的變量,雖然知道這個(gè)以后會(huì)經(jīng)常用到,但沒想到了基本語法這里,竟然又冒出來了成員變量和局部變量。變來變?nèi)ヌ菀鬃屓烁銜灹?,今天我們就挑揀出來梳理一下?/div> 2016-07-07
  • IntelliJ IDEA 刷題利器 LeetCode 插件詳解

    IntelliJ IDEA 刷題利器 LeetCode 插件詳解

    這篇文章主要介紹了IntelliJ IDEA 刷題利器 LeetCode 插件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java生成二維碼的2種實(shí)現(xiàn)方法

    Java生成二維碼的2種實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java生成二維碼的2種實(shí)現(xiàn)方法,二維碼的實(shí)質(zhì)就是一個(gè)鏈接地址,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用流程詳細(xì)介紹

    SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用流程詳細(xì)介紹

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-02-02
  • java數(shù)組元素的引用實(shí)例講解

    java數(shù)組元素的引用實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java數(shù)組元素的引用實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-03-03
  • Springboot創(chuàng)建項(xiàng)目的圖文教程(idea版本)

    Springboot創(chuàng)建項(xiàng)目的圖文教程(idea版本)

    這篇文章主要介紹了Springboot創(chuàng)建項(xiàng)目的圖文教程(idea版本),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java實(shí)現(xiàn)堆排序和圖解

    Java實(shí)現(xiàn)堆排序和圖解

    如果將堆理解為二叉樹,那么樹中任一非葉結(jié)點(diǎn)的關(guān)鍵字均不大于(或不小于)其左右孩子(若存在)結(jié)點(diǎn)的關(guān)鍵字,堆排序的時(shí)間復(fù)雜度為O(N*logN),這里我們就來詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)
    2021-07-07
  • 解決MyBatis-Plus使用動(dòng)態(tài)表名selectPage不生效的問題

    解決MyBatis-Plus使用動(dòng)態(tài)表名selectPage不生效的問題

    這篇文章主要介紹了如惡化解決MyBatis-Plus使用動(dòng)態(tài)表名selectPage不生效的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • ssm框架上傳圖片保存到本地和數(shù)據(jù)庫示例

    ssm框架上傳圖片保存到本地和數(shù)據(jù)庫示例

    本篇文章主要介紹了ssm框架上傳圖片保存到本地和數(shù)據(jù)庫示例,主要使用了Spring+SpringMVC+MyBatis框架集合,有興趣的可以了解一下。
    2017-03-03

最新評論