JDBC, Hibernate를 사용하여 clob/blob 필드 처리

3695 단어 oracleclobblob
1. 먼저 알아야 할 (1) 서로 다른 데이터베이스에서 clob,blob에 대응하는 유형: mysql에서:clob는 textblob에 대응하고blobdb2/oracle에서clob는 clobblob에 대응하고blob(2)domain에 대응하는 유형:clob는 Stringblob에 대응하고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(); 

좋은 웹페이지 즐겨찾기