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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘Blob类型数据存取测试用表‘

然后是数据库连接的工具类:

package blobtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCUtil {

    /*使用静态代码块完成驱动的加载*/
    static {
        try {
            String driverName = "com.mysql.jdbc.Driver";
            Class.forName(driverName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*提供连接的方法*/
    public static Connection getConnection() {
        Connection con = null;
        try {
            //连接指定的MMySQL数据库,三个参数分别是:数据库地址、账号、密码
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf8", "root", "w513723");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }
    /*关闭连接的方法*/
    public static void close(ResultSet rs, Statement stmt, Connection con) {
        try {
            if (rs != null)
                rs.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        try {
            if (stmt != null)
                stmt.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        try {
            if (con != null)
                con.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

接下来是真正的插入数据库的java代码:

package blobtest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ReadWriteBlobwithMysql
{
    private Connection con;
    private Statement stmt;

    public Statement getStmt()
    {
        return stmt;
    }

    public void setStmt(Statement stmt)
    {
        this.stmt = stmt;
    }

    public ResultSet getRs()
    {
        return rs;
    }

    public void setRs(ResultSet rs)
    {
        this.rs = rs;
    }

    ResultSet rs;

    public Connection getCon()
    {
        return con;
    }

    public void setCon(Connection con)
    {
        this.con = con;
    }

    public void insert(Connection con) throws SQLException
    {
        String fileName = "E:\\JavaProject\\HelloWorld\\src\\blobtest\\test.html";
        File file = new File(fileName);

        try
        {
            FileInputStream fis = new FileInputStream(file);
            String sql = "insert into blobtest values(‘12‘,‘0000‘,‘平安银行‘,?)";
             PreparedStatement prest = con.prepareStatement(sql);
             prest.setBlob(1, fis,file.length());
             prest.execute();
        } catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public ReadWriteBlobwithMysql(Connection con)
    {
        this.setCon(con);
        try
        {
            stmt = con.createStatement();
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        Connection con = JDBCUtil.getConnection();
        ReadWriteBlobwithMysql dao = new ReadWriteBlobwithMysql(con);
        try
        {
//            dao.createTable();
            dao.insert(con);
        } catch (SQLException e)
        {
            e.printStackTrace();
        } finally
        {
            JDBCUtil.close(dao.getRs(), dao.getStmt(), dao.getCon());
        }
    }

}

使用select语句查看一下执行结果,第二条是使用程序插入的,其他的是使用sql语句直接插入的:

下面是增加了从数据库读取blob数据的java代码,增加了queryBlob(。。。)函数:

package blobtest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ReadWriteBlobwithMysql
{
    private Connection con;
    private Statement stmt;

    public Statement getStmt()
    {
        return stmt;
    }

    public void setStmt(Statement stmt)
    {
        this.stmt = stmt;
    }

    public ResultSet getRs()
    {
        return rs;
    }

    public void setRs(ResultSet rs)
    {
        this.rs = rs;
    }

    ResultSet rs;

    public Connection getCon()
    {
        return con;
    }

    public void setCon(Connection con)
    {
        this.con = con;
    }

    public void insert(Connection con) throws SQLException
    {
        String fileName = "E:\\JavaProject\\HelloWorld\\src\\blobtest\\test.html";
        File file = new File(fileName);

        try
        {
            FileInputStream fis = new FileInputStream(file);
            String sql = "insert into blobtest values(‘12‘,‘0000‘,‘平安银行‘,?)";
            PreparedStatement prest = con.prepareStatement(sql);
            prest.setBlob(1, fis, file.length());
            prest.execute();
        } catch (FileNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void queryBlob(String id, Connection con) throws IOException
    {
        String fileName = "E:\\JavaProject\\HelloWorld\\src\\blobtest\\test1.html";
        String sql = "select * from blobtest where primary_id= ?";
        try
        {
            PreparedStatement prest = con.prepareStatement(sql);
            prest.setString(1, id);
            ResultSet rs = prest.executeQuery();
            while (rs.next())
            {
                Blob bl = rs.getBlob("blob_data");// 数据保存在表的blob_data字段中,这里取出这里保存的数据。
                InputStream is = bl.getBinaryStream(); // 查看blob,可以通过流的形式取出来。  注意一定要是用流的方式读取出来
                BufferedInputStream buffis = new BufferedInputStream(is);
                // 保存到buffout
                BufferedOutputStream buffout = new BufferedOutputStream(new FileOutputStream(fileName));
                byte[] buf = new byte[1024];
                int len = buffis.read(buf, 0, 1024);
                while (len > 0)
                {
                    buffout.write(buf);
                    len = buffis.read(buf, 0, 1024);
                }
                buffout.flush();
                buffout.close();
                buffis.close();
            }

        } catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public ReadWriteBlobwithMysql(Connection con)
    {
        this.setCon(con);
        try
        {
            stmt = con.createStatement();
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        Connection con = JDBCUtil.getConnection();
        ReadWriteBlobwithMysql dao = new ReadWriteBlobwithMysql(con);
        try
        {
            // dao.createTable();
//            dao.insert(con);
            dao.queryBlob("12",con);
        } catch (IOException e)
        {
            e.printStackTrace();
        } finally
        {
            JDBCUtil.close(dao.getRs(), dao.getStmt(), dao.getCon());
        }
    }

}

时间: 2024-10-01 07:55:13

mysql存取blob类型数据的相关文章

Jpa更新blob类型数据问题

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

JDBC基础学习(三)—处理BLOB类型数据

一.BLOB类型介绍      在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据.      在MySQL中有四种BLOB类型.          实际使用中根据需要存入的数据大小定义不同的BLOB类型.需要注意的是,如果存储的文件过大,数据库的性能会下降.   二.Java数据类型与MySQL类型对照表      对于blob,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组.      

【mysql】Blob类型

来源:http://qgyang.blog.sohu.com/115847378.html 一般在需要存储较大数据时使用Bolb MySql的Bolb四种类型 MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据.BLOB类型实际是个类型系列(TinyBlob.Blob.MediumBlob.LongBlob),除了在存储的最大信息量上不同外,他们是等同的. MySQL的四种BLOB类型 类型                  大小(单位:字节) Ti

grails中如何存取Clob类型数据

首先说一下CLOB.CLOB是一种数据库中的数据类型,它将字符大对象存储为数据库表某一行中的一个列值,请注意,这里说的是字符大数据,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身,也就是说,在表里面,Clob类型的存储的字段,它里面存的是一个指针而不是数据本身,这在统计时非常好用,因为你不需要知道数据是什么,只需要知道有多少个数据就够了. 这里也说明一下CLOB和BLOB的区别 1.CL

XMLHttpRequest 中 blob类型数据转text

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

OLEDB存取BLOB型数据

现代数据库系统除了支持一些标准的通用数据类型以外,大多数还支持一种称之为BLOB型的数据. BLOB全称为big large object bytes, 大二进制对象类型,这种类型的数据通常用于存储文档.图片.音频等文件,这些文件一般体积较大,保存这些文件可以很方便的管理和检索这类信息.在MS SQLSERVER中常见的BLOB数据类型有text.ntext(n表示unicode).image.nvarchar.varchar.varbinary等.其中image基本可以用来保存一切二进制文件,

毕设的学习(16)Java存取mysql的Date类型数据

https://www.cnblogs.com/Latiny/p/8613352.html 这是用jdbc的,所以有个rs 即ResultSet //设置日期格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // new Date()为获取当前系统时间 String nowTime = df.format(new Date()); 直接使用nowTime可以插入. 原文地址:https://www.

mysql 查询json类型数据

如果 t1表里有一个extra字段,字段是text类型,数据为json格式  {"value":"XMjgxIqqqqqqqqqq"} 如何获取json里面value对于的值呢? JSON_EXTRACT(t1.extra,'$.value') 得到 "XMjgxIqqqqqqqqqq" 原始sql和原始结果 select t1.id AS item_id, t1.title AS item_name,t6.id AS topic_id, t6.

mybatis查询mysql的datetime类型数据时间差了14小时

今天使用mybatis查询mysql中的数据时,莫名其妙的所有时间都出错了,所有时间都比数据库时间多了14小时,考虑了一下,初步判定是系统时区的问题.因为mysql时区设置默认是操作系统时区,查看了下centos时区,东8区没有错,所以可以判定是代码里面设置了一个错误的时区. 现在开始调试mybatis源码,调试到mysql-connector-java-6.0.4.jar包的com.mysql.cj.jdbc.io.JdbcTimestampValueFactory的createFromTim