`
rain_2372
  • 浏览: 675812 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java Mysql存取Blob数据

    博客分类:
  • java
阅读更多
当数据库字段为blob类型时 ,我们如果使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法需要注意

在向blob字段类型中插入数据时,要使用javaio的inputstream,读入文件。
而相反从blob字段中读出数据时,同样使用javaio的inputstream,再用javaio的outputstream写入文件。

同clob的示例中的问题
如果在设置字节流的地方不加类型转换的话,如下:
stat.setBinaryStream(1, in, file.length());
则会出现如下错误
Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
    at test.jdbc.BlobRW.create(BlobRW.java:38)
    at test.jdbc.BlobRW.main(BlobRW.java:24)

后来看了看java和mysql的jdbc驱动两方面的代码,原因明白,原来是用的jdk1.6的版本中,有长度为long类型的方法。
而对应的mysql的jdbc驱动jar中,还没有实现。
将其进行类型转换后,即可正常运行。
转:http://blog.csdn.net/darkhorsefly/article/details/6024883

package com.allan;
import java.sql.*;
import java.io.*;
public class Storeblobfile {


public static void main(String[] args) {
  try{
   FileInputStream file = new FileInputStream("C:\\shanshui.jpg");
   Class.forName("com.mysql.jdbc.Driver");
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=root");
   PreparedStatement ps = conn.prepareStatement("insert into user values(?,?,?)");
   ps.setString(1,"blob");
   ps.setInt(2,23);
   ps.setBinaryStream(3, file, file.available());
   ps.executeUpdate();
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select file from user where name = 'blob'");
   while(rs.next()){
    Blob blob = rs.getBlob(1);
    InputStream in = blob.getBinaryStream();
    FileOutputStream fout = new FileOutputStream("C:\\copy.jpg");
    int b = -1;
    while((b=in.read())!=-1){
     fout.write(b);
    }
   }
  
  
  }catch(Exception e){
   System.out.println(e.getMessage());
  }
 

}

}

转:http://blog.sina.com.cn/s/blog_4b4d59600100boh6.html

hibernate操作mysql的blob数据
package hibernate;

import java.sql.Blob;

public class Blobtest  implements java.io.Serializable {

     private long id;
     private Blob image;

    public Blobtest() {
    }

    public Blobtest(Blob image) {
        this.image = image;
    }

    public long getId() {
        return this.id;
    }
   
    public void setId(long id) {
        this.id = id;
    }

    public Blob getImage() {
        return this.image;
    }
   
    public void setImage(Blob image) {
        this.image = image;
    }
}
测试写入数据:

package hibernate;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class Test {
    public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream("F:/lzx.jpg");       
        byte[] b = new byte[in.available()];
        in.read(b);
        in.close();
        Blobtest blobTest=new Blobtest();

        blobTest.setImage(Hibernate.createBlob(b));
        Session session=HibernateUtil.currentSession();
        Transaction tx=session.beginTransaction();
        session.save(blobTest);
        tx.commit();
        System.out.print("success");
        HibernateUtil.closeSession();
    }
}

读出数据:

package hibernate;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.SQLException;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class TestWrite {
    public static void main(String[] args) throws IOException, SQLException {
        Session session=HibernateUtil.currentSession();
        Transaction tx=session.beginTransaction();
        Blobtest blobTest = new Blobtest();
        blobTest = (Blobtest) session.get(Blobtest.class, new Long(1));
        System.out.println("qu chu shu ju");
        OutputStream out = new FileOutputStream("F:/111.jpg");
        out.write(blobTest.getImage().getBytes(1,(int) blobTest.getImage().length()));
        out.flush();
        out.close();
        HibernateUtil.closeSession();
    }
}
转:http://www.blogjava.net/dihin/archive/2006/06/25/54956.html
  • 大小: 57.7 KB
分享到:
评论

相关推荐

    Java实现用Mysql存取图片操作实例

    主要介绍了Java实现用Mysql存取图片操作实例,本文讲解了使用BLOB类型保存和读取图片的代码实例,需要的朋友可以参考下

    MYSQL

    10.2.7 MySQL 怎样使用内存 10.2.8 MySQL 怎样锁定数据库表 10.2.9 数据库表级锁定的问题 10.3 使你的数据尽可能小 10.4 MySQL 索引的使用 10.5 存取或更新数据的查询速度 10.5.1 估计...

    MySQL中文参考手册.chm

    10.2.7 MySQL 怎样使用内存 10.2.8 MySQL 怎样锁定数据库表 10.2.9 数据库表级锁定的问题 10.3 使你的数据尽可能小 10.4 MySQL 索引的使用 10.5 存取或更新数据的查询速度 ...

    mysql5.5.28.zip

    多样的数据类型,包括有/无符号1,2,3,4,8字节integers,FLOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,DATETIME,YEAR,SET,ENUM;非常灵活和安全的权限系统,密码加密;为Windows提供ODBC接口,可通过...

    MySQL中文参考手册

    * 6 MySQL 存取权限系统 o 6.1 权限系统做什么 o 6.2 MySQL用户名和口令 o 6.3 与MySQL服务器连接 o 6.4 使你的口令安全 o 6.5 MySQL 提供的权限 o 6.6 权限系统工作原理 o 6.7 存取控制,阶段1:连接证实 o ...

    spring+mybatis下BLOB字段的图片存取代码

    spring+mybatis下BLOB字段的图片存取代码,仅整理了Controller层的代码,service和dao的代码很简单,所以没有整理

    MySQL命令大全

    MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    MYSQL常用命令大全

    MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    图片插入数据库(数据库下载图片到本地)

    Java实现对Mysql的图片存取操作: Mysql中可以存储大文件数据,一般使用的BLOB对象。如图片,视频等等。  BLOB是一个二进制大对象,可以容纳可变数量的数据。因为是二进制对象,所以与编码方式无关。有4种BLOB...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    blob 1~4GB 以二进制信息保存数据 三、 DDL语言 1. Create table命令 用于创建表。在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……...

Global site tag (gtag.js) - Google Analytics