一、BLOB类型介绍

     在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据。

     在MySQL中有四种BLOB类型。

    

    实际使用中根据需要存入的数据大小定义不同的BLOB类型。需要注意的是,如果存储的文件过大,数据库的性能会下降。

 

二、Java数据类型与MySQL类型对照表

     对于blob,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组。 
     对于boolen类型,在mysql数据库中,个人认为用int类型代替较好,对bit操作不是很方便,尤其是在具有web页面开发的项目中,表示0/1,对应java类型的Integer较好。

 

三、添加Blob到数据库

Person.java

  1. public class Person{
  2.  
  3. private int id;
  4. private String name;
  5. private String city;
  6. private int age;
  7. private float salary;
  8. private byte[] head;
  9.  
  10. public Person(){
  11. super();
  12. }
  13.  
  14. public Person(int id,String name,String city,int age,float salary,byte[] head){
  15. super();
  16. this.id = id;
  17. this.name = name;
  18. this.city = city;
  19. this.age = age;
  20. this.salary = salary;
  21. this.head = head;
  22. }
  23.  
  24. //...get、set方法
  25.  
  26. }
  1. @Test
  2. public void testAddPerson() throws Exception{
  3.  
  4. FileInputStream fis = new FileInputStream("1.jpg");
  5. byte[] bs = inputStream2Byte(fis);
  6. addPerson(new Person(0,"HeHe2","BJ",23,1300,bs));
  7. }
  8.  
  9. /*
  10. * 插入数据
  11. */
  12. public static void addPerson(Person p) throws Exception{
  13. String sql = "insert into person(id,name,city,age,salary,head) values(?,?,?,?,?,?)";
  14. JdbcTools.update(sql,p.getId(),p.getName(),p.getCity(),p.getAge(),p.getSalary(),p.getHead());
  15. }
  16.  
  17. /*
  18. * 输入流转换为字节数组
  19. * @param inStream
  20. * @return
  21. * @throws Exception
  22. */
  23. public static byte[] inputStream2Byte(InputStream inStream) throws Exception{
  24. ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
  25. byte[] buffer = new byte[1024];
  26. int len = -1;
  27. while((len = inStream.read(buffer)) != -1){
  28. outSteam.write(buffer,0,len);
  29. }
  30. outSteam.close();
  31. inStream.close();
  32. return outSteam.toByteArray();
  33. }

JdbcTools.update()方法

  1. /*
  2. * 通用的增删改方法
  3. * 执行SQL语句,使用PreparedStatemnt
  4. * @param sql 带占位符的sql语句
  5. * @param args 填写SQL占位符的可变参数
  6. */
  7. public static void update(String sql,Object...args){
  8. Connection con = null;
  9. PreparedStatement ps = null;
  10. ResultSet rs = null;
  11.  
  12. try{
  13. con = JdbcTools.getConnection();
  14. ps = con.prepareStatement(sql);
  15.  
  16. for(int i = 0;i < args.length;i++){
  17. ps.setObject(i + 1,args[i]);
  18. }
  19.  
  20. ps.execute();
  21.  
  22. }catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. finally{
  26. JdbcTools.releaseResource(con,ps,rs);
  27. }
  28. }
  1. 结果:
  1.  

     在最后BLOb中右键另存为图片即可看到。

JDBC基础学习(三)—处理BLOB类型数据的更多相关文章

  1. mysql存取blob类型数据

    参考网址:http://www.cnblogs.com/jway1101/p/5815658.html 首先是建表语句,需要实现将表建立好. CREATE TABLE `blobtest` ( `pr ...

  2. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  3. mybatis 处理CLOB/BLOB类型数据

    BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...

  4. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  5. <十>JDBC_处理Blob类型数据

    /*  * 读取BLOB数据:  *  使用getBlob方法读取到Blob对象  *  调用Blob的getBinaryStream(方法得到输入流,在使用IO操作  * */ @Test publ ...

  6. SpringMVC基础学习(三)—参数绑定

    一.基本数据类型的绑定 页面 <form action="${pageContext.request.contextPath}/test.do" method="p ...

  7. 插入与读取Blob类型数据

    BlobTest package com.aff.PreparedStatement; import java.io.File; import java.io.FileInputStream; imp ...

  8. KingbaseES blob 类型数据导入导出

    KingbaseES兼容了oracle的blob数据类型.通常是用来保存二进制形式的大数据,也可以用来保存其他类型的数据. 下面来验证一下各种数据存储在数据库中形式. 建表 create table ...

  9. Django基础学习三_路由系统

    今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...

随机推荐

  1. mysql uodate select子查询

    UPDATE user SET pwd='123' WHERE id in (    SELECT id from user WHERE username = 'zx' ); 报错[Err] 1093 ...

  2. 做了个新的UWP类库 Sharp2D

    C#开发UWP的时候如果要实现高斯模糊效果的话,最好的选择似乎是微软的Win2D 但是Win2D太过庞大了,仅仅是庞大其实也没啥问题,毕竟net core就很庞大,但Win2d是一个Winmd组件 w ...

  3. rdb map出错rbd sysfs write failed

    创建了一个rbd镜像 $ rbd create --size 4096 docker_test 然后,在Ceph client端将该rbd镜像映射为本地设备时出错. $ rbd map docker_ ...

  4. ELK日志套件安装与使用

    1.ELK介绍     ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器.其中Logstash负责日志收集,elast ...

  5. 深入理解ajax系列第三篇——响应解码

    前面的话 我们接收到的响应主体类型可以是多种形式的,包括字符串String.ArrayBuffer对象.二进制Blob对象.JSON对象.javascirpt文件及表示XML文档的Document对象 ...

  6. 注册登录系统项目思路 -- javaweb

    功能:   > 注册   > 登录   ---------------------------------   JSP:   * login.jsp  --> 登录表单   * re ...

  7. freemodbus移植讲解 ZZ

    一   为什么要移植Freemodbus 为什么要移植Freemodbus,这个问题需要从两个方面来回答.第一,modbus是一个非常好的应用层协议,它很简洁也相对完善.对于还没有接触过modbus的 ...

  8. JavaWeb之JSTL标签

    JSP中有了EL可以很方便的引用对象和属性,但是也有一些不足的地方,比如不能遍历对象列表这些,再加上JSTL(Java Standard Tag Library)的话那就完美了.JSTL主要包括cor ...

  9. Apache无法启动原因

    Apache不能启动解决办法 作者的话:遇到这个问题的时候,从网上找了很多资料,结果都是让我这个新手摸不着头绪 还好,在我长时间的查找下,还是找到了一篇文章,解决了我的烦恼,下面是我对这个文章的一些对 ...

  10. 使用javascript解一道关于会议日程安排的面试题

    这道面试题是从 HarrisonHao 的一篇博文中看到的:原文链接 我看到之后,感觉此题十分有趣,遂自己用 node.js 以不同的思路实现了一遍,实现中使用了 lodash 原题比较长,而且是英文 ...