学习操作oracle.sql.Blob数据类型,向数据库插入Blob数据类型的数据
/**
* @author cqw
* 向数据库插入Blob类型数据,数据库表 SSDATAFILE(SSDATAFILEID,STRFILENAME,STRTIMETICKS,BLOBFILE)
* @param datafileid 文件id
* @param filename 文件名
* @param timetick 时间戳
* @param file 文件
*/
public static void insertForBlob(String datafileid,String filename,String timetick,File file)throws Exception{
//oracle中插入blob数据时,要先插入空EMPTY_BLOB(),然后再使用blob的输出流将数据写到数据库,期间要用for update语句将要插入的行锁住
String sql1="INSERT INTO SSDATAFILE(SSDATAFILEID,STRFILENAME,STRTIMETICKS,BLOBFILE)VALUES(?,?,?,EMPTY_BLOB())";
//for update语句将刚刚插入的行锁住
String sql2="select BLOBFILE from SSDATAFILE where SSDATAFILEID=? for update";
OutputStream outStream = null;
InputStream inStream = null;
dbEngine.beginTrans();
dbEngine.update(sql1,datafileid,filename,timetick);
oracle.sql.BLOB blob=(oracle.sql.BLOB)dbEngine.querySimple(sql2,datafileid);
//使用BLOB对象的getBinaryOutputStream()创建输出流对象
outStream = blob.getBinaryOutputStream();
//使用传进来的Flie对象创建输入流对象
inStream = new FileInputStream(file);
//创建缓存
byte[] buff = new byte[(int)file.length()];
//循环读取数据并把数据写入输出流中
try{
while(inStream.read(buff)!=-1){
outStream.write(buff);
}
}catch (Exception e){
e.printStackTrace();
} finally {
outStream.flush();
outStream.close();
inStream.close();
}
dbEngine.commit();
}