`

Mysql中如何实现Blob的存取?

    博客分类:
  • java
阅读更多

此实现为用java访问mysql的blob,对图片进行存取


/**
* Title: BlobPros.java
* Project: test
* Description: 把图片存入mysql中的blob字段,并取出
* Call Module: mtools数据库中的tmp表
* File: C:downloadsluozsh.jpg
* Copyright: Copyright (c) 2003-2003
* Company: uniware
* Create Date: 2002.12.5
* @Author: ChenQH
* @version 1.0 版本*
*
* Revision history
* Name Date Description
* ---- ---- -----------
* Chenqh 2003.12.5 对图片进行存取
*
* note: 要把数据库中的Blob字段设为longblob
*
*/

//package com.uniware;

import java.io.*;
import java.util.*;
import java.sql.*;

public class BlobPros
{
private static final String URL = "jdbc:mysql://10.144.123.63:3306/mtools?user=wind&password=123&useUnicode=true";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;

public BlobPros()
{
}

/**
* 向数据库中插入一个新的BLOB对象(图片)
* @param infile 要输入的数据文件
* @throws java.lang.Exception
*/
public void blobInsert(String infile) throws Exception
{
FileInputStream fis = null;
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);

file = new File(infile);
fis = new FileInputStream(file);
//InputStream fis = new FileInputStream(infile);
pstmt = conn.prepareStatement("insert into tmp(descs,pic) values(?,?)");
pstmt.setString(1,file.getName()); //把传过来的第一个参数设为文件名
//pstmt.setBinaryStream(2,fis,(int)file.length()); //这种方法原理上会丢数据,因为file.length()返回的是long型
pstmt.setBinaryStream(2,fis,fis.available()); //第二个参数为文件的内容
pstmt.executeUpdate();
}
catch(Exception ex)
{
System.out.println("[blobInsert error : ]" + ex.toString());
}
finally
{
//关闭所打开的对像//
pstmt.close();
fis.close();
conn.close();
}
}


/**
* 从数据库中读出BLOB对象
* @param outfile 输出的数据文件
* @param picID 要取的图片在数据库中的ID
* @throws java.lang.Exception
*/

public void blobRead(String outfile,int picID) throws Exception
{
FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];

try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
pstmt = conn.prepareStatement("select pic from tmp where id=?");
pstmt.setInt(1,picID); //传入要取的图片的ID
rs = pstmt.executeQuery();
rs.next();

file = new File(outfile);
if(!file.exists())
{
file.createNewFile(); //如果文件不存在,则创建
}
fos = new FileOutputStream(file);
is = rs.getBinaryStream("pic");
int size = 0;
/* while(size != -1)
{
size = is.read(Buffer); //从数据库中一段一段的读出数据
//System.out.println(size);
if(size != -1) //-1表示读到了文件末
fos.write(Buffer,0,size);
} */
while((size = is.read(Buffer)) != -1)
{
//System.out.println(size);
fos.write(Buffer,0,size);
}

}
catch(Exception e)
{
System.out.println("[OutPutFile error : ]" + e.getMessage());
}
finally
{
//关闭用到的资源
fos.close();
rs.close();
pstmt.close();
conn.close();
}
}

public static void main(String[] args)
{
try
{

BlobPros blob = new BlobPros();
//blob.blobInsert("C:Downloadsluozsh1.jpg");
blob.blobRead("c:/downloads/1.jpg",47);
}
catch(Exception e)
{
System.out.println("[Main func error: ]" + e.getMessage());
}
}
}

分享到:
评论

相关推荐

    java对blob的存取.pdf

    为什么需要对 Blob 进行存取? 在实际应用中,我们经常需要在数据库中存储和读取图片、音频、视频等大型文件,而 Blob 正是我们实现这一功能的关键。 如何对 Blob 进行存取? 在 Java 中,我们可以使用 JDBC...

    利用VB存取数据库中BLOB数据

    以下将详细讲解如何利用VB来存取数据库中的BLOB数据。 首先,我们需要了解BLOB数据的基本概念。BLOB是数据库管理系统中用来存储大量二进制数据的字段类型,它可以是任何类型的图像、文档或者其他非文本数据。在...

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

    在Java编程中,有时我们需要将图片等大容量的二进制数据存储到数据库中,MySQL提供了BLOB(Binary Large Object)类型,专门用于存储大块...正确使用这些技术,可以帮助我们在应用程序中实现高效、可靠的图片存取功能。

    DELPHI的CLOB和BLOB存取处理.zip_DELPHI的CLOB和BLOB存取处理_hallzgz

    本篇文章将深入探讨DELPHI中如何有效地进行CLOB和BLOB的存取处理。 CLOB主要用来存储大文本数据,如长篇文章、XML文档或JSON字符串,而BLOB则用于存储大量的二进制数据,如图像、音频、视频文件或者任何非文本的...

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

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

    DELPHI BLOB存取(ADO,ODAC)

    - **写入BLOB**:同理,使用SaveToStream或SaveToFile方法将内存中的TMemoryStream或文件内容保存到BLOB字段。执行Insert或Edit方法,然后调用Post来提交更改。 无论是ADO还是ODAC,处理BLOB数据时都需要注意内存...

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

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

    Delphi 如何将二维数组数据 以Blob 存入数据库中 并读取 工程

    通过以上步骤,你可以成功地在 Delphi 中实现二维数组数据的 Blob 存储和读取。实际操作时,可能还需要考虑性能优化,比如批量处理和缓存策略。对于大型数据集,可以考虑使用分块读写以减少内存占用。在实践中,可以...

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

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

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

    1. **图片上传与存储**:了解如何通过Struts2上传图片,并将其以Blob形式存储在MySQL数据库中。 2. **图片读取与展示**:掌握如何从数据库中读取图片Blob数据,并将其显示在Web页面上。 #### 开发准备 1. **开发...

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

    总结来说,MySQL、SQL Server和Oracle都提供了各自的大对象存储解决方案,主要通过BLOB或类似的类型实现,存取大对象时通常涉及流操作。在使用过程中,需要注意每个数据库系统的具体限制和配置,以及选择合适的数据...

    MySQL中文参考手册.chm

    1.2 关于本手册 1.2.1 本手册中使用的约定 1.3 MySQL的历史 1.4 MySQL的主要特征 1.5 MySQL稳定性? 1.6 顺应2000年 1.7 SQL一般信息和教程 1.8 有用的MySQL相关链接 ...

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

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

    浅议PHP MySQL中二进制文件的存取.pdf

    标题中的“浅议PHP MySQL中二进制文件的存取”和描述中提到的实践案例,主要探讨了如何在PHP环境中利用MySQL数据库存储和检索二进制数据,特别是图像和Word文档这类大容量的二进制文件。这些操作在Web应用中非常常见...

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

    为了解决这个问题,MySQL提供了BLOB(Binary Large Object)和TEXT类型,它们专门设计用来存储大量的文本和二进制数据。 1. **BLOB和TEXT类型** - **BLOB** 类型用于存储二进制数据,有TINYBLOB、BLOB、MEDIUMBLOB...

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

    **MySQL中的大对象存取:** MySQL提供了几种不同类型的BLOB(Binary Large Object)和TEXT类型来存储大对象数据,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。其中,BLOB类型可以存储最多2^16(65,535)个字节的...

    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 ...

    c# MySql数据库存储图片

    本示例将详细介绍如何使用C#连接到MySQL数据库,并实现图片的存储功能。 首先,确保你已安装了MySQL数据库服务器以及对应的C#驱动程序,例如`MySql.Data.dll`。这个库允许C#应用程序与MySQL数据库进行通信。你可以...

Global site tag (gtag.js) - Google Analytics