JDBC基础学习(三)—处理BLOB类型数据
一、BLOB类型介绍
在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据。
在MySQL中有四种BLOB类型。
实际使用中根据需要存入的数据大小定义不同的BLOB类型。需要注意的是,如果存储的文件过大,数据库的性能会下降。
二、Java数据类型与MySQL类型对照表
对于blob,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组。
对于boolen类型,在mysql数据库中,个人认为用int类型代替较好,对bit操作不是很方便,尤其是在具有web页面开发的项目中,表示0/1,对应java类型的Integer较好。
三、添加Blob到数据库
Person.java
- public class Person{
- private int id;
- private String name;
- private String city;
- private int age;
- private float salary;
- private byte[] head;
- public Person(){
- super();
- }
- public Person(int id,String name,String city,int age,float salary,byte[] head){
- super();
- this.id = id;
- this.name = name;
- this.city = city;
- this.age = age;
- this.salary = salary;
- this.head = head;
- }
- //...get、set方法
- }
- @Test
- public void testAddPerson() throws Exception{
- FileInputStream fis = new FileInputStream("1.jpg");
- byte[] bs = inputStream2Byte(fis);
- addPerson(new Person(0,"HeHe2","BJ",23,1300,bs));
- }
- /*
- * 插入数据
- */
- public static void addPerson(Person p) throws Exception{
- String sql = "insert into person(id,name,city,age,salary,head) values(?,?,?,?,?,?)";
- JdbcTools.update(sql,p.getId(),p.getName(),p.getCity(),p.getAge(),p.getSalary(),p.getHead());
- }
- /*
- * 输入流转换为字节数组
- * @param inStream
- * @return
- * @throws Exception
- */
- public static byte[] inputStream2Byte(InputStream inStream) throws Exception{
- ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- int len = -1;
- while((len = inStream.read(buffer)) != -1){
- outSteam.write(buffer,0,len);
- }
- outSteam.close();
- inStream.close();
- return outSteam.toByteArray();
- }
JdbcTools.update()方法
- /*
- * 通用的增删改方法
- * 执行SQL语句,使用PreparedStatemnt
- * @param sql 带占位符的sql语句
- * @param args 填写SQL占位符的可变参数
- */
- public static void update(String sql,Object...args){
- Connection con = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try{
- con = JdbcTools.getConnection();
- ps = con.prepareStatement(sql);
- for(int i = 0;i < args.length;i++){
- ps.setObject(i + 1,args[i]);
- }
- ps.execute();
- }catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- JdbcTools.releaseResource(con,ps,rs);
- }
- }
- 结果:
在最后BLOb中右键另存为图片即可看到。
JDBC基础学习(三)—处理BLOB类型数据的更多相关文章
- mysql存取blob类型数据
参考网址:http://www.cnblogs.com/jway1101/p/5815658.html 首先是建表语句,需要实现将表建立好. CREATE TABLE `blobtest` ( `pr ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- mybatis 处理CLOB/BLOB类型数据
BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...
- Python基础学习三
Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...
- <十>JDBC_处理Blob类型数据
/* * 读取BLOB数据: * 使用getBlob方法读取到Blob对象 * 调用Blob的getBinaryStream(方法得到输入流,在使用IO操作 * */ @Test publ ...
- SpringMVC基础学习(三)—参数绑定
一.基本数据类型的绑定 页面 <form action="${pageContext.request.contextPath}/test.do" method="p ...
- 插入与读取Blob类型数据
BlobTest package com.aff.PreparedStatement; import java.io.File; import java.io.FileInputStream; imp ...
- KingbaseES blob 类型数据导入导出
KingbaseES兼容了oracle的blob数据类型.通常是用来保存二进制形式的大数据,也可以用来保存其他类型的数据. 下面来验证一下各种数据存储在数据库中形式. 建表 create table ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
随机推荐
- mysql uodate select子查询
UPDATE user SET pwd='123' WHERE id in ( SELECT id from user WHERE username = 'zx' ); 报错[Err] 1093 ...
- 做了个新的UWP类库 Sharp2D
C#开发UWP的时候如果要实现高斯模糊效果的话,最好的选择似乎是微软的Win2D 但是Win2D太过庞大了,仅仅是庞大其实也没啥问题,毕竟net core就很庞大,但Win2d是一个Winmd组件 w ...
- rdb map出错rbd sysfs write failed
创建了一个rbd镜像 $ rbd create --size 4096 docker_test 然后,在Ceph client端将该rbd镜像映射为本地设备时出错. $ rbd map docker_ ...
- ELK日志套件安装与使用
1.ELK介绍 ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器.其中Logstash负责日志收集,elast ...
- 深入理解ajax系列第三篇——响应解码
前面的话 我们接收到的响应主体类型可以是多种形式的,包括字符串String.ArrayBuffer对象.二进制Blob对象.JSON对象.javascirpt文件及表示XML文档的Document对象 ...
- 注册登录系统项目思路 -- javaweb
功能: > 注册 > 登录 --------------------------------- JSP: * login.jsp --> 登录表单 * re ...
- freemodbus移植讲解 ZZ
一 为什么要移植Freemodbus 为什么要移植Freemodbus,这个问题需要从两个方面来回答.第一,modbus是一个非常好的应用层协议,它很简洁也相对完善.对于还没有接触过modbus的 ...
- JavaWeb之JSTL标签
JSP中有了EL可以很方便的引用对象和属性,但是也有一些不足的地方,比如不能遍历对象列表这些,再加上JSTL(Java Standard Tag Library)的话那就完美了.JSTL主要包括cor ...
- Apache无法启动原因
Apache不能启动解决办法 作者的话:遇到这个问题的时候,从网上找了很多资料,结果都是让我这个新手摸不着头绪 还好,在我长时间的查找下,还是找到了一篇文章,解决了我的烦恼,下面是我对这个文章的一些对 ...
- 使用javascript解一道关于会议日程安排的面试题
这道面试题是从 HarrisonHao 的一篇博文中看到的:原文链接 我看到之后,感觉此题十分有趣,遂自己用 node.js 以不同的思路实现了一遍,实现中使用了 lodash 原题比较长,而且是英文 ...