因为今天需要测试插入Oracle 数据库带有Blob字段的数据的速度。之前几乎没用过Oracle 数据库所以在写代码测试之前也遇到过很多坑。
测试框架:springBoot +Mybatis
框架的搭建就不具体说明了。
总体思路:
插入:因为Oracle BLOB字段存储的数据是二进制的数据。所以我先把图片转换成二进制数据用byte[]数组来存储进行插入。
导出:把BLOB字段的二进制数据查询出来,再写入图片中。
long startTime = System.currentTimeMillis();
RkSfzZp sfzZp = new RkSfzZp();
sfzZp.setSLH(UUID.randomUUID().toString());
sfzZp.setGMSFHM("410727199303282312");
sfzZp.setGXSJ("20200331000000");
sfzZp.setLRRQ(new Date());
sfzZp.setRH(11);
sfzZp.setRCTIDSJ("20200331000000");
sfzZp.setYXBZ("Y");
sfzZp.setSSSSXQ_DM("1111111");
sfzZp.setDSBS("411000");
sfzZp.setSCRHJKSJ("20200331000000");
/**
* 以下是主要逻辑===================================================================
*/
try (FileInputStream fileInputStream = new FileInputStream(new File("E://1.jpg"));
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
){
byte[] bytes = new byte[1024];
int let =0;
while ((let = fileInputStream.read(bytes))!=-1) {
arrayOutputStream.write(bytes,0,let);
}
byte[] toByteArray = arrayOutputStream.toByteArray();
sfzZp.setZP(toByteArray);
/**
* =========================================================================================
*/
} catch (IOException e) {
e.printStackTrace();
}
sfzMapper.addSfzZp(sfzZp);
long lastTime = System.currentTimeMillis();
System.out.println("当前耗时时间:"+(lastTime-startTime));
mybatis文件:
INSERT INTO RK_SFZ_ZP ( SLH, RH, GMSFHM,ZP, LRRQ, YXBZ, SSSSXQ_DM, DSBS, GXSJ, SCRHJKSJ, RCTIDSJ)
VALUES
(
#{SLH,jdbcType=VARCHAR},
#{RH,jdbcType=NUMERIC},
#{GMSFHM,jdbcType=VARCHAR},
#{ZP,jdbcType=BLOB},
#{LRRQ,jdbcType=DATE},
#{YXBZ,jdbcType=CHAR},
#{SSSSXQ_DM,jdbcType=VARCHAR},
#{DSBS,jdbcType=VARCHAR},
#{GXSJ,jdbcType=VARCHAR},
#{SCRHJKSJ,jdbcType=VARCHAR},
#{RCTIDSJ,jdbcType=VARCHAR}
)
实体类:
@Data
public class RkSfzZp {
private String SLH;
private int RH;
private String GMSFHM;
private byte[] ZP;
private Date LRRQ;
private String YXBZ;
private String SSSSXQ_DM;
private String DSBS;
private String GXSJ;
private String SCRHJKSJ;
private String RCTIDSJ;
}