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中右键另存为图片即可看到。

时间: 2024-10-08 10:27:48

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

mysql存取blob类型数据

参考网址:http://www.cnblogs.com/jway1101/p/5815658.html 首先是建表语句,需要实现将表建立好. CREATE TABLE `blobtest` ( `primary_id` varchar(32) NOT NULL, `bank_id` varchar(32) NOT NULL, `bank_name` varchar(64) NOT NULL, `blob_data` blob NOT NULL, PRIMARY KEY (`primary_id`

Python入门基础学习 三

Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形,true就相当于1,false相当于0,可以用来计算 类型转换 转换:整数:int();字符串:str();浮点数:float() 转换例子:(图9) 如果用内置函数当变量名,比如str=123,一旦被赋值,再使用这个函数会被报错. type()函数可以明确告诉我们变量类型. isinstance

Jpa更新blob类型数据问题

今天做项目,碰到了一个很坑爹的问题,jpa在进行blob类型数据插入的时候调用entityManager.persist(entity);可以成功插入,但是在更新的时候,调用 entity = entityManager.merge(entity);entity可以获取更新之后的值,但是执行完后数据库只更新其他类型的数据,blob类型的数据还是修改之前的数据,没有将新的值持久化进去,这个是什么问题呢?求解~~~

Python学习之通用序列类型数据详解

本文和大家分享的主要是python通用序列类型数据的相关操作,一起来看看吧,希望对大家学习python有所帮助. Python的序列,Python有6种内建的序列,包括:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.其中最为常用的是Python的列表和元组. Python的序列 Python有6种内建的序列,包括:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.其中最为常用的是Python的列表和元组. Python序列的应用 Pyt

XMLHttpRequest 中 blob类型数据转text

场景描述:ajax接收的数据类型既有blob类型也有text时,不同的类型做不同的处理.如,当下载文件.图片等信息时候,需要字节流responseType = 'blob',同时,如果后台有出错信息需要前台展示,此时需要字符类型responseType = 'text'.两个类型不能同时存在. 解决方案:都用blob类型接收,然后将blob类型转text类型 实施:blob类型无法直接转text类型,需要中间转换 var blob = xhr.response; //xhr.response -

Dango基础学习三

今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为<静态路由>.<动态路由>.<二级路由> 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配到的urls转发到对应app的views的函数中 2.在对应的app的views中配置相应的函数 3.这个时候我们通过浏览器访问这个url,就可以得到如下的结果 ok.至此,静态路由我们就学习完了,下面我们开始学习动态路由 二.动态路由的学习,动态路由的学习主要

JavaScript基础学习(三)&mdash;数组

一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可以随着数据的添加而自动增长以扩容纳新增数据.   二.数组的操作 1.创建 //创建一个空数组 var arr = []; var arr2 = [1,true,new Date()]; arr2.length = 2; alert(arr2); //true   2.pop和push方法     

JDBC基础学习(一) 第一个JDBC示例代码

创建JDBC应用程序: 我们以<MYSQL权威指南>中mylibray的authors表为例 下面是构建JDBC应用程序的六个步骤: 导入数据包 . 需要包括含有需要进行数据库编程的JDBC类的包.大多数情况下,使用 import java.sql.*  就可以了 注册JDBC驱动程序. 需要初始化驱动程序,可以与数据库打开一个通信通道 打开连接. 需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接 执行查询 . 

JDBC基础学习(一)&mdash;JDBC的增删改查

一.数据的持久化     持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各种关系数据库来完成.      持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件.XML数据文件中.        二.JDBC简介 1.JDBC概述      JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统.通用的SQL