`
rain_2372
  • 浏览: 684191 次
  • 性别: 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(Binary Large Object)类型,专门用于存储大块的二进制数据。本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 ...

    java对blob的存取.pdf

    Java 对 Blob 的存取 在 Java 中对 Blob(Binary Large OBject)的存取是非常重要的,Blob 是一种二进制大对象,它可以用来存储图片、音频、视频等大型文件。下面是关于 Java 对 Blob 的存取的详细知识点。 什么是...

    Oracle,SQL2000,MYSQL存取图片或二进制数据的功能文件

    3. **MySQL存取图片** MySQL提供了BLOB数据类型,类似于Oracle,用于存储二进制大对象。`MySQLUploader.java`文件可能包含处理MySQL数据库中图片或二进制数据的Java代码,使用JDBC连接,加载MySQL驱动,通过...

    Mysql数据库中存取图片的Java实现.pdf

    Mysql 数据库中存取图片的 Java 实现 MySQL 数据库中存取图片的 Java 实现可以通过两种方式实现:一种是将图片单独存放在固定文件夹里,数据库表中对应的字段仅保存该图片的路径和名字 ;另一种是先对图片进行编码...

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

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

    MySQL存取大文本及二进制文件(图片)

    - 下载时,从数据库读取BLOB数据到`BufferedOutputStream`,再通过`FileOutputStream`将缓冲区内容写入到本地文件。 7. **注意事项** - 虽然MySQL支持大对象存储,但频繁地读写大对象可能会对数据库性能产生影响...

    如何基于java向mysql数据库中存取图片

    "基于Java向MySQL数据库中存取图片" 在本文中,我们将介绍如何使用Java语言向MySQL数据库中存取图片。首先,我们需要了解MySQL数据库中的Blob类型,它是一个二进制类型,通常我们会将图片或音像文件转成二进制再...

    mysql-connector-java-5.1.40-bin数据库连接工具.rar

    总的来说,"mysql-connector-java-5.1.40-bin.jar"是Java开发者与MySQL数据库交互的关键工具,通过它可以轻松地在Java应用中实现数据的存取和管理。正确地配置和使用这个驱动,能够极大地提升开发效率,并确保应用...

    使用Struts2上传图片存取到Mysql中并读取出来显示在页面上_好资源0分送

    2. **图片读取与展示**:掌握如何从数据库中读取图片Blob数据,并将其显示在Web页面上。 #### 开发准备 1. **开发环境配置**:确保具备以下软件环境: - Struts2版本:2.1.8.1 - Hibernate版本:3.x - Spring...

    java 数据库中图片文件的存取

    同样,使用ResultSet的getBlob()方法可以从数据库检索BLOB数据。 2. **文件系统存储**:另一种方法是将图片文件存储在文件系统中,然后在数据库中仅存储文件路径。这种方法的优点在于数据库负担较小,但需要管理...

    java存取图片到数据库

    表中至少需要一个字段用于存储图片数据,可以是一个BLOB(Binary Large Object)类型的字段,用于存储二进制数据。例如,创建一个名为`blog_images`的表,包含`id`(主键)和`image_data`(图片数据)两个字段。 3. ...

    mysql,sqlserver,oracle三种数据库的大对象存取解析.docx

    BLOB用于存储二进制数据,类似于SQL Server的IMAGE和MySQL的BLOB类型;CLOB用于存储字符数据;NCLOB用于存储Unicode字符数据。 Oracle的大对象存取通常使用Oracle的特定API,如OracleCallableStatement和...

    Java存取数据库中的图片.rar_JAVA数据库_java 数据库_图片 java_图片数据库_数据库 图片

    在Java编程中,存取数据库中的图片涉及到一系列的步骤和技术,包括数据库操作、二进制数据处理以及IO流的使用。以下将详细讲解这个过程。 首先,我们需要了解基础的Java数据库连接技术。Java通过JDBC(Java ...

    Java访问数据库存取图片

    在Java编程中,访问数据库存取图片...以上就是使用Java和JDBC访问SQL Server 2000数据库存取图片的基本过程,虽然描述中提到的是SQL Server 2000,但同样的原理适用于其他支持BLOB类型的数据库,如MySQL、Oracle等。

    java实现本地读取图片存储到数据库中并在html网页显示

    这个过程涉及到的主要技术包括Java编程、数据库操作(特别是MySQL)以及前后端交互。 首先,我们需要理解的是,将图片存储到数据库中通常采用的方法是将图片转换为二进制数据流。这是因为数据库系统更善于处理结构...

    如何存取数据库图像字段.rar_图像 数据库_数据存取

    例如,Python的pymysql和SQLAlchemy,Java的JDBC,或.NET的Entity Framework,它们都提供了处理BLOB数据的API。 6. **安全性和备份**:存储在数据库中的图像数据应遵循与任何其他敏感数据相同的安全措施,如加密和...

    mysql,sqlserver,oracle三种数据库的大对象存取

    在Java中操作Oracle的`BLOB`类型,通常需要通过`oracle.jdbc.OraclePreparedStatement`和`oracle.jdbc.OracleResultSet`类提供的特定方法,如`setBlob`和`getBlob`,进行数据的读写。这些方法可以更方便地与Oracle...

Global site tag (gtag.js) - Google Analytics