zoukankan      html  css  js  c++  java
  • Java实现对Mysql的图片存取操作

    1.MySQL中的BLOB类型

      Mysql中可以存储大文件数据,一般使用的BLOB对象。如图片,视频等等。

      BLOB是一个二进制大对象,可以容纳可变数量的数据。因为是二进制对象,所以与编码方式无关。有4BLOB类型:TINYBLOBBLOBMEDIUMBLOBLONGBLOB。它们只是可容纳值的最大长度不同。

      四种字段类型保存的最大长度如下:

      TINYBLOB - 255 bytes
      BLOB - 65535 bytes(64KB)
      MEDIUMBLOB - 16,777,215 bytes(16MB) (2^24 - 1)
      LONGBLOB - 4G bytes (2^32 – 1)

    2.java对MySQL图片的读取

    下面是test数据库中定义的phototest表结构。

    id int(11) YES
    photo mediumblob YES

     

    保存与读取图片的代码如下:

     1 import java.io.*;
     2 import java.sql.*;
     3 public class LoadStoreBLOB {
     4     public static void main(String[] args) {
     5         DBConnection     DB = new DBConnection();    //负责连接MySQl数据库的类
     6         Connection         con = null;
     7         PreparedStatement     ps = null;
     8         ResultSet      rs = null;
     9         InputStream    in = null; 
    10         try {
    11             //从本地硬盘硬盘读取一张图片保存到数据库
    12             con=DB.getConn();
    13             in=new FileInputStream("sdf.png");
    14             ps=con.prepareStatement("insert into test.phototest values(?,?)");
    15             ps.setInt(1,2);
    16             ps.setBinaryStream(2, in, in.available());
    17             ps.executeUpdate();
    18             in.close();
    19             DB.closeConn(con);
    20             
    21             //从数据库读取图片保存到本地硬盘
    22             con=DB.getConn();
    23             ps=con.prepareStatement("select * from test.phototest where id=?");
    24             ps.setInt(1,2);
    25             rs=ps.executeQuery();
    26             rs.next();    //将光标指向第一行
    27             in=rs.getBinaryStream("photo");
    28             byte[] b=new byte[in.available()];    //新建保存图片数据的byte数组
    29             in.read(b);
    30             OutputStream out=new FileOutputStream("222.jpg");
    31             out.write(b);
    32             out.flush();
    33             out.close();
    34             DB.closeConn(con);
    35         } 
    36         catch (Exception e) {
    37             System.out.println("Error::"+e);
    38         }
    39     }
    40 }

     3.选择合适的字段大小

      如果选择的字段类型的最大长度较小,放不下保存的数据,可能会报出MySQL数据截断异常。如:

        com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'photo' at row 1

    Mysql 中文参考手册列类型:

      http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#blob

  • 相关阅读:
    Android 接口中含有" "不能正常显示
    android
    EditText禁止自动弹出键盘
    相册选择照片
    Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取
    Android WebView获取UserAgent
    php extract()用法
    php的安装和破解
    php 兼容换行符
    php 引用
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/3758529.html
Copyright © 2011-2022 走看看