目录
- 一、表结构
- 二、mapper 接口和sql
- 三、实体类
- 四、controller
- 五、插入成功后的效果
springboot连接Oracle写入blob类型图片数据
一、表结构
-- 创建表: student_info 属主: scott (默认当前用户)
create table scott.student_info (
sno number(10) constraint pk_si_sno primary key,
sname varchar2(10),
sex varchar2(2),
create_date date,
headimage blob
);
二、mapper 接口和sql
@Mapper
public interface StudentMapper {
@Insert("insert into scott.student_info (SNO, SNAME,SEX,CREATE_DATE,HEADIMAGE) values (#{sno},#{sname},#{sex},sysdate,#{headimage})")
int addStudent(Student student);
}
三、实体类
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Data
public class Student {
private int sno;
private String sname;
private String sex;
private Date create_date;
private byte[] headimage;
public Student(int sno,String sname,String sex,byte[] headimage){
this.sno = sno;
this.sname = sname;
this.sex = sex;
this.headimage = headimage;
}
}
四、controller
@Slf4j
@RestController
public class StudentController {
@Resource
public StudentMapper studentMapper;
@PostMapping("/addStudent")
public String addStudent(String name, String sex, @RequestParam MultipartFile file){
// 将MultipartFile 格式 转换成byte[]类型,以便插入Oracle blob类型字段。
InputStream ins = null;
byte[] data=new byte[1024];
try {
ins = file.getInputStream();
byte[] buffer=new byte[1024];
int len=0;
ByteArrayOutputStream bos=new ByteArrayOutputStream();
while((len=ins.read(buffer))!=-1){
bos.write(buffer,0,len);
}
bos.flush();
data = bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}finally {
ins.close();
}
int sno= RandomUtil.randomInt(1,1000000);//产生一个[10, 100000)的随机数
Student student = new Student(sno,name,sex,data);
log.info("String.valueOf(student.getHeadimage().length) "+String.valueOf(student.getHeadimage().length));
//log.info("入参 "+student);
int i = studentMapper.addStudent(student);
log.info("插入值 i "+i);
//return AjaxResult.success("插入成功",i);
if (i>=1){
return "插入成功";
}else {
return "插失败功";
}
}
}
五、插入成功后的效果
如下图所示,查询出来后能查看到图片。