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 "插失败功";
        }
    }

}

五、插入成功后的效果

如下图所示,查询出来后能查看到图片。
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐