当前位置: > 数据库 > MySQL >

Java 访问mysql的blob,对图片进行存取

时间:2014-12-02 13:15来源:linux.it.net.cn 作者:IT

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


 

[java]view plaincopyprint?
  1. /** 
  2.  * Title:         BlobPros.java 
  3.  * Project:       test 
  4.  * Description:  把图片存入mysql中的blob字段,并取出 
  5.  * Call Module:  mtools数据库中的tmp表 
  6.  * File:         C:downloadsluozsh.jpg 
  7.  * Copyright: Copyright (c) 2003-2003 
  8.  * Company:      uniware 
  9.  * Create Date:  2002.12.5 
  10.  * @Author:      ChenQH 
  11.  * @version 1.0 版本* 
  12.  * 
  13.  *  Revision history 
  14.  *  Name         Date     Description 
  15.  *  ----      ----        ----------- 
  16.  * Chenqh   2003.12.5        对图片进行存取 
  17.  * 
  18.  * note:         要把数据库中的Blob字段设为longblob 
  19.  * 
  20.  */  
  21.   
  22. //package com.uniware;  
  23.   
  24. import java.io.*;  
  25.  import java.util.*;  
  26.  import java.sql.*;  
  27.   
  28. public class BlobPros  
  29.  {  
  30.  private static final String URL = "jdbc:mysql://10.144.123.63:3306/mtools?user=wind&password=123&useUnicode=true";  
  31.  private Connection conn = null;  
  32.  private PreparedStatement pstmt = null;  
  33.  private ResultSet rs = null;  
  34.  private File file = null;  
  35.   
  36. public BlobPros()  
  37.  {  
  38.  }  
  39.   
  40. /** 
  41.  * 向数据库中插入一个新的BLOB对象(图片) 
  42.  * @param infile 要输入的数据文件 
  43.  * @throws java.lang.Exception 
  44.  */  
  45.  public void blobInsert(String infile) throws Exception  
  46.  {  
  47.  FileInputStream fis = null;  
  48.  try  
  49.  {  
  50.  Class.forName("org.gjt.mm.mysql.Driver").newInstance();  
  51.  conn = DriverManager.getConnection(URL);  
  52.   
  53. file = new File(infile);  
  54.  fis = new FileInputStream(file);  
  55.  //InputStream fis = new FileInputStream(infile);  
  56.  pstmt = conn.prepareStatement("insert into tmp(descs,pic) values(?,?)");  
  57.  pstmt.setString(1,file.getName());    //把传过来的第一个参数设为文件名  
  58.  //pstmt.setBinaryStream(2,fis,(int)file.length());   //这种方法原理上会丢数据,因为file.length()返回的是long型  
  59.  pstmt.setBinaryStream(2,fis,fis.available());  //第二个参数为文件的内容  
  60.  pstmt.executeUpdate();  
  61.  }  
  62.  catch(Exception ex)  
  63.  {  
  64.  System.out.println("[blobInsert error : ]" + ex.toString());  
  65.  }  
  66.  finally  
  67.  {  
  68.  //关闭所打开的对像//  
  69.  pstmt.close();  
  70.  fis.close();  
  71.  conn.close();  
  72.  }  
  73.  }  
  74.   
  75. /** 
  76.  * 从数据库中读出BLOB对象 
  77.  * @param outfile 输出的数据文件 
  78.  * @param picID 要取的图片在数据库中的ID 
  79.  * @throws java.lang.Exception 
  80.  */  
  81.   
  82. public void blobRead(String outfile,int picID) throws Exception  
  83.  {  
  84.  FileOutputStream fos = null;  
  85.  InputStream is = null;  
  86.  byte[] Buffer = new byte[4096];  
  87.   
  88. try  
  89.  {  
  90.  Class.forName("org.gjt.mm.mysql.Driver").newInstance();  
  91.  conn = DriverManager.getConnection(URL);  
  92.  pstmt = conn.prepareStatement("select pic from tmp where id=?");  
  93.  pstmt.setInt(1,picID);         //传入要取的图片的ID  
  94.  rs = pstmt.executeQuery();  
  95.  rs.next();  
  96.   
  97. file = new File(outfile);  
  98.  if(!file.exists())  
  99.  {  
  100.  file.createNewFile();     //如果文件不存在,则创建  
  101.  }  
  102.  fos = new FileOutputStream(file);  
  103.  is = rs.getBinaryStream("pic");  
  104.  int size = 0;  
  105.  /* while(size != -1) 
  106.  { 
  107.  size = is.read(Buffer);    //从数据库中一段一段的读出数据 
  108.  //System.out.println(size); 
  109.  if(size != -1)            //-1表示读到了文件末 
  110.  fos.write(Buffer,0,size); 
  111.  }  */  
  112.  while((size = is.read(Buffer)) != -1)  
  113.  {  
  114.  //System.out.println(size);  
  115.  fos.write(Buffer,0,size);  
  116.  }  
  117.   
  118. }  
  119.  catch(Exception e)  
  120.  {  
  121.  System.out.println("[OutPutFile error : ]" + e.getMessage());  
  122.  }  
  123.  finally  
  124.  {  
  125.  //关闭用到的资源  
  126.  fos.close();  
  127.  rs.close();  
  128.  pstmt.close();  
  129.  conn.close();  
  130.  }  
  131.  }  
  132.   
  133. public static void main(String[] args)  
  134.  {  
  135.  try  
  136.  {  
  137.   
  138. BlobPros blob = new BlobPros();  
  139.  //blob.blobInsert("C:Downloadsluozsh1.jpg");  
  140.  blob.blobRead("c:/downloads/1.jpg",47);  
  141.  }  
  142.  catch(Exception e)  
  143.  {  
  144.  System.out.println("[Main func error: ]" + e.getMessage());  
  145.  }  
  146.  }  
  147.  }  


 参考资料:http://www.cublog.cn/u/2550/?u=http://www.cublog.cn/u/2550/showart.php?id=9900

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容