麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

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

2019-11-26 16:06:30
字體:
來源:轉載
供稿:網友

(1)不同數據庫中對應clob,blob的類型:
mysql中 : clob對應text  blob對應blob
db2/oracle中 clob對應clob blob對應blob

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

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

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

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

復制代碼 代碼如下:

//插入空值
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();


讀取內容:
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
復制代碼 代碼如下:

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
復制代碼 代碼如下:

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:
復制代碼 代碼如下:

原理基本相同:
Photo photo = new Photo();
photo.setName("jack");
photo.setPhoto(hibernate.createBlob(""))://放一個空值
session.save(photo);
session.flush();
//
session.refresh(photo,LockMode.UPGRADE); //鎖住此對象
oracle.sql.Blob blob = photo.getPhoto();//取得此blob的指針
OutputStream out = blob.getBinaryOutputStream();   
//寫入一個文件
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();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久综合一区 | 欧美三级短视频 | 性欧美xxxx免费岛国不卡电影 | av成人免费在线观看 | 精品久久久一二三区播放播放播放视频 | 一色桃子av大全在线播放 | 国产精品一区网站 | 红杏亚洲影院一区二区三区 | 亚洲最大中文字幕 | 成人三级电影网址 | 黄色大片www | 99最新网址| 内地av在线 | 日韩视频一区二区三区在线观看 | 黄色高清av | 一级做a爱片久久毛片a高清 | 亚洲特黄妇女高潮 | 午夜视频在线 | www.com香蕉| 中文字幕在线视频网站 | 日本在线高清 | 中国美女一级黄色片 | 成人男女啪啪免费观看网站四虎 | 福利在线小视频 | 欧美成人小视频 | 在线免费观看精品 | 精品国产一区二区三区四区阿崩 | 亚洲伊人色欲综合网 | 久久久经典视频 | av免费在线播放网址 | 国产激情视频在线 | 法国性xxx精品hd专区 | 欧美日韩在线视频一区 | 可以看毛片的网址 | 美国一级毛片片aa久久综合 | 久久久久久久久久久亚洲 | 久久精品在线免费观看 | 日韩av有码在线 | 久久久久久久久久网 | 亚洲性综合网 | 性爱免费视频 |