JDBC、Hibernateを使用してclob/blobフィールドを処理
1、まず知っておきたい(1)異なるデータベースでclob、blobのタイプ:mysqlでclob対応text blob対応blob db 2/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タイプのように簡単ではなく、挿入ステップは一般的に2つのステップである:第1ステップは空の値を挿入し、第2ステップはこの行をロックし、clob/blobフィールドを更新する.
3、jdbc操作blob
4、hibernateth処理clob
5、hibernateで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();