Hibernate读写Oracle BLOB
CREATE TABLE TUSER(
ID VARCHAR2(32 BYTE) NOT NULL,
NAME VARCHAR2(20 BYTE) NOT NULL,
SEX VARCHAR2(1 BYTE),
AGE NUMBER(3),
ADDRESS VARCHAR2(100 BYTE),
PHONE NUMBER(10),
EMAIL VARCHAR2(255 BYTE),
IMAGE BLOB,
RESUME CLOB
)
public class test2 {
public static void main(String[] args) {
// testWriteLob();
testReadLob();
}
public static void testReadLob() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
String hql = "from ynn.hibernate.model.TUser";
Query query = session.createQuery(hql);
List<TUser> list = query.list();
Iterator<TUser> iter = list.iterator();
while (iter.hasNext()) {
TUser user = (TUser) iter.next();
try {
InputStream is = user.getImage().getBinaryStream();
OutputStream os = new FileOutputStream("a.jpg");
// 通过is.availabel()得不到总长度
byte[] buf = new byte;
int i = 0;
while((i=is.read(buf))!=-1){
os.write(buf,0,i);
}
// 以下读Clob
is = user.getResume().getAsciiStream();
while((i=is.read(buf))!=-1){
System.out.println(new String(buf,0,i));
}
is.close();
os.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
session.close();
}
// Clob ,Blob在SQLSERVER下的读写操作 P138
// Oracle的Clob, Blob都有自己的游标
public static void testWriteLob() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
TUser user = new TUser();
user.setAge(new Long(20));
user.setName("Shark");
user.setImage(Hibernate.createBlob(new byte));
user.setResume(Hibernate.createClob(" "));
Transaction tx = session.beginTransaction();
session.save(user);
// flush() 强制Hibernate立即执行insert sql
session.flush();
// 通过refresh(), 强制Hibernate执行select for update
session.refresh(user, LockMode.UPGRADE);
System.out.println(user.getImage().getClass());
/* 向Blob写入实际内容 */
// 返回的是SerializableBlob类型的对象,这是个实现了Blob接口的对象,但
// 不能直接转型为BLOB
SerializableBlob sb = (SerializableBlob) user.getImage();
// 需要调用它的getWrappedBlob来转型
BLOB blob = (BLOB) sb.getWrappedBlob();
try {
// 将某个问件读入后,写到Blob字段的输出流中
OutputStream out = blob.getBinaryOutputStream();
FileInputStream imgis = new FileInputStream("C:\\kb3.jpg");
byte[] buf = new byte; // 10k缓存
int len;
while ((len = imgis.read(buf)) > 0) {
out.write(buf, 0, len);
}
imgis.close();
out.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 向Clob写入实际内容
SerializableClob sc = (SerializableClob) user.getResume();
CLOB clob = (CLOB) sc.getWrappedClob();
java.io.Writer writer;
try {
writer = clob.getCharacterOutputStream();
writer.write("this is my resume");
writer.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// save
session.save(user);
tx.commit();
session.close();
}
转载自:http://huazhouji.iteye.com
页:
[1]