`
Shabrave
  • 浏览: 17498 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java之二进制存取图片(MySQL数据库)

阅读更多
闲来无事,弄了个二进制读取图片,而非本地路径读取,仅供学习之用,大家多多指教!!
第一步建表:

SQL:

create table images_info(

image_id int(10) not null auto_increment primary key,

image_name varchar(255),

image_size int,

image_date datetime,

image_type varchar(10),

image_data longblob,

image_description varchar(255),

author varchar(100));


修改图片传入最大值:

mySQL安装目录下的my-small.ini文件里面的max_allowed_packet = 1M修改成:

  max_allowed_packet = 32M

(参考:在Linux系统中它的配置在mycnf文件中加入max_allowed_packet=32M就行
在命令行配置的方法是:mysqld-nt --console --max_allowed_packet=32M)


第二步编写java代码:
1.插入图片到数据库中代码片段:
private Connection conn = null;
private PreparedStatement pstmt = null;
private static final String sql = "INSERT INTO images_info(image_id,image_name,image_size,image_date,image_type,image_description,author,image_data)VALUES(null,?,?,now(),?,?,?,?)";
public boolean addPhoto(ImageVo imageVo) {
  boolean flag = false;
  try{
   //将文件转换为流文件
   InputStream photoStream = new FileInputStream(imageVo.getImageData());
   //获取数据库连接
   conn = ConnectionFactory.getConnection();
   pstmt = conn.prepareStatement(sql);
   pstmt.setString(1, imageVo.getImageName());
   pstmt.setInt(2, imageVo.getImageSize());
   pstmt.setString(3 , "jpg");//图片类型
   pstmt.setString(4, imageVo.getDescription());
   pstmt.setString(5, imageVo.getAuthor());
   pstmt.setBinaryStream(6, photoStream, (int)imageVo.getImageData().length());
   int row = pstmt.executeUpdate();
   if(row == 1){
    flag = true;
   }
  }catch(FileNotFoundException fe){
   fe.printStackTrace();
  }catch(SQLException e){
   e.printStackTrace();
  }finally{
   if(null != pstmt){
    try{pstmt.close();}
    catch(SQLException e){
     e.printStackTrace();
    }
   }
   if(null != conn){
    try{conn.close();}
    catch(SQLException e){
     e.printStackTrace();
    }
   }
  }
  return flag;
}   

2.从数据库读取图片信息
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
//查询具体图片数据流格式
private static final String data_sql = "select image_data from images_info where image_id = ?";
public void ReadImage(int imageId,String imageName){
  FileOutputStream fos = null;
  InputStream in = null;
  byte[] Buffer = new byte[4096];
  try{
   conn = ConnectionFactory.getConnection();
   pstmt = conn.prepareStatement(data_sql);
   pstmt.setInt(1, imageId);
   rs = pstmt.executeQuery();
   rs.next();
   File file = new File(imageName);
   if(!file.exists()){
    file.createNewFile();//如果文件不存在,则创建
   }
   fos = new FileOutputStream(file);
   in = rs.getBinaryStream("image_data");
   int size = 0;
   while ((size = in.read(Buffer)) != -1) {
    fos.write(Buffer, 0, size);
   }
  }catch(SQLException e){
   e.printStackTrace();
  }catch(IOException ioe){
   ioe.printStackTrace();
  }finally{
   //关闭数据流
   if(null != rs){
    try{
     rs.close();
    }catch(SQLException e){
     e.printStackTrace();
    }
   }
   if(null != pstmt){
    try{
     pstmt.close();
    }catch(SQLException e){
     e.printStackTrace();
    }
   }
   if(null != conn){
    try{
     conn.close();
    }catch(SQLException e){
     e.printStackTrace();
    }
   }
  }
}
对象类属性:
String imageId;
String imageName;
int imageSize;
Date imageDate;
String imageType;
String description;
String author;
File imageData;
分享到:
评论

相关推荐

    图片以二进制存取数据库

    在关系型数据库如MySQL、PostgreSQL、Oracle和SQL Server中,BLOB是一个特殊的数据类型,用于存储大量的二进制数据,例如图片、音频或视频文件。在SQL Server中,这种类型被称为`VARBINARY(MAX)`,它允许存储最多2^...

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

    在Java编程中,有时我们需要将图片等大容量的二进制数据存储到数据库中,MySQL提供了BLOB(Binary Large Object)类型,专门用于存储大块的二进制数据。本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 ...

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

    `MySQLUploader.java`文件可能包含处理MySQL数据库中图片或二进制数据的Java代码,使用JDBC连接,加载MySQL驱动,通过PreparedStatement执行SQL语句将二进制数据存入数据库。读取时,可以使用ResultSet的...

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

    Mysql 数据库中存取图片的 Java 实现 MySQL 数据库中存取图片的 Java ...以二进制格式存取图片和以 Base64 编码存取图片都是 MySQL 数据库中存取图片的常用方法,两种方法各有其优缺,根据实际情况选择适合的方法。

    java存取图片到数据库

    以上就是使用Java处理图片存取数据库的基本流程,实际应用中可能需要根据具体需求进行调整和优化。在开发过程中,确保遵循最佳实践,包括数据安全、性能优化和异常处理,以保证系统的稳定性和可靠性。

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

    在MySQL数据库中,存储大文本(例如长篇文章、HTML代码)和二进制文件(如图片、PDF文档)是一项常见的需求。这样的数据通常不适合用标准的数据类型如VARCHAR或TEXT来处理,因为它们可能超出这些类型的最大限制。...

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

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

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

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

    Java访问数据库存取图片

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

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

    1. **BLOB类型**:BLOB(Binary Large Object)是数据库中用于存储二进制大数据的类型,如图片、音频或视频文件。在Java中,可以使用PreparedStatement的setBlob()方法将图片转换为BLOB类型并插入数据库。同样,使用...

    java存图片到数据库

    1. **图片转二进制流**: 在Java中,我们可以使用`java.io`包中的`FileInputStream`或`BufferedInputStream`类读取图片文件并将其转换为字节流。通过调用`read()`方法,我们可以逐字节地读取文件内容,然后将其存储...

    公文档案在MySQL数据库中的存取.pdf

    《公文档案在MySQL数据库中的存取》这篇文章探讨了如何在办公自动化环境中,利用MySQL数据库高效地存储和访问公文档案。MySQL作为一款关系型数据库管理系统,具备强大的数据处理能力和安全性,非常适合用于存储和...

    java对blob的存取.pdf

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

    mysql-connector-java-3.1.11-bin

    MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它提供了Java Database Connectivity (JDBC) API,使得Java开发者能够方便地在应用中存取MySQL数据库。标题"mysql-connector-java-3.1.11-bin"指出这...

    Mysql数据库连接驱动

    对二进制的分发,mysqlbug可在‘bin’目录下找到。 如果你有任何关于这本手册的增补或修正的任何建议,请将它们发给手册小组(docs@mysql.com )。 1.1 什么是 MySQL? MySQL是一个真正的多用户、多线程SQL数据库...

    mysql-connector-java-5.0.6-bin

    标题中的"mysql-connector-java-5.0.6-bin"即表示这是MySQL Connector/J的一个特定版本——5.0.6,它是一个二进制(bin)包,通常包含有编译后的Java类库。 首先,我们来了解一下JDBC。JDBC是Java平台的标准接口,...

    mysql-connector-java-5.1.23-bin.jar

    "mysql-connector-java-5.1.23-bin.jar" 文件正是这个驱动程序的二进制版本,用于在Java环境中与MySQL数据库进行交互。 MySQL Connector/J遵循JDBC标准,提供了多种接口和类,如`DriverManager`、`Connection`、`...

    mysql-connector-java-5.1.40-bin.rar

    connector-java-5.1.40-bin.jar" 是这个连接器的一个特定版本,版本号为5.1.40,它是一个二进制文件,包含有Java类和其他资源,使得Java应用程序能够通过JDBC(Java Database Connectivity)接口连接到MySQL数据库。...

    存取数据库图片

    2. **图片存储**:当图片上传时,程序会读取图片文件的二进制数据,然后将其存储到数据库的BLOB字段中。这通常通过编程语言的数据库API完成,例如PHP的PDO,Java的JDBC,Python的sqlite3库等。 3. **数据库操作**:...

    MySQL学习资料知识点总结.doc

    MySQL是世界上最受欢迎的开源数据库管理系统之一,尤其在Java企业级应用中被广泛使用。它是一个关系型数据库管理系统,由MySQL AB公司开发,现在是Oracle公司的产品。MySQL以其开源、免费和可扩展性著称,提供了高效...

Global site tag (gtag.js) - Google Analytics