java 存储 blob_java对blob的存取

此实现为用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());

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值