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

1.MySQL中的BLOB类型

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

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

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

代码如下:

  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表结构。

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

import java.io.*;
import java.sql.*;
public class LoadStoreBLOB {
 public static void main(String[] args) {
  DBConnection  DB = new DBConnection(); //负责连接MySQl数据库的类
  Connection   con = null;
  PreparedStatement  ps = null;
  ResultSet  rs = null;
  InputStream in = null;
  try {
   //从本地硬盘硬盘读取一张图片保存到数据库
   con=DB.getConn();
   in=new FileInputStream("sdf.png");
   ps=con.prepareStatement("insert into test.phototest values(?,?)");
   ps.setInt(1,2);
   ps.setBinaryStream(2, in, in.available());
   ps.executeUpdate();
   in.close();
   DB.closeConn(con);

   //从数据库读取图片保存到本地硬盘
   con=DB.getConn();
   ps=con.prepareStatement("select * from test.phototest where id=?");
   ps.setInt(1,2);
   rs=ps.executeQuery();
   rs.next(); //将光标指向第一行
   in=rs.getBinaryStream("photo");
   byte[] b=new byte[in.available()]; //新建保存图片数据的byte数组
   in.read(b);
   OutputStream out=new FileOutputStream("222.jpg");
   out.write(b);
   out.flush();
   out.close();
   DB.closeConn(con);
  }
  catch (Exception e) {
   System.out.println("Error::"+e);
  }
 }
}

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

(0)

相关推荐

  • java操作mysql入门代码实例(含插入、更新和查询)

    复制代码 代码如下: import java.sql.*; public class mysql {    public static String url = "jdbc:mysql://localhost:3306/test";//characterEncoding=GBK    public static String username = "root";    public static String password = "root";

  • Python简单调用MySQL存储过程并获得返回值的方法

    本文实例讲述了Python调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: try: conn = MySQLdb.connect ( host = 'localhost', user = 'root', passwd = 'pass', db = 'prod', port = 3306 ) cursor1=conn.cursor() cursor1.execute("CALL error_test_proc()") cursor1.close() e

  • C#中调用MySQL存储过程的方法

    本文实例讲述了C#中调用MySQL存储过程的方法.分享给大家供大家参考.具体如下: 这段代码演示在 C# 程序中调用 MySQL 的存储过程,没有返回值,没有参数传递. MySqlConnection myConnection; myConnection = new MySqlConnection(); myConnection.ConnectionString = "database="+database+";server="+ server+";use

  • VB.NET调用MySQL存储过程并获得返回值的方法

    本文实例讲述了VB.NET调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体实现方法如下: Dim myConnectionString As String = "Database=" & myDatabase & _ " ;Data Source=" & myHost & _ ";User Id=" & myUserId & ";Password=" &

  • Java调用MySQL存储过程并获得返回值的方法

    本文实例讲述了Java调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体如下: private void empsInDept(Connection myConnect, int deptId) throws SQLException { CallableStatement cStmt = myConnect.prepareCall("{CALL sp_emps_in_dept(?)}"); cStmt.setInt(1, deptId); cStmt.execute

  • Java操作Mysql的方法

    本文实例讲述了Java操作Mysql的方法.分享给大家供大家参考.具体分析如下: 不同于C#操纵数据库的千篇一律,如果是要Java把操纵数据库的语句分为两种: 一种是有结果的select语句,还有一种是没结果的insert into,update,delete等语句 1.如果是有结果的select语句,则需要定义一个ResultSet变量来接,同时使用con.prepareStatement(sql).executeQuery();来查询,其中con是一个数据库连接变量,在程序头必须引入java

  • java连接Mysql数据库的工具类

    一个封装好的链接Mysql数据库的工具类,可以方便的获取Connection对象关闭Statement.ResultSet.Statment对象等等 复制代码 代码如下: package myUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLExceptio

  • java调用mysql存储过程实例分析

    本文实例讲述了java调用mysql存储过程的方法.分享给大家供大家参考.具体如下: 数据库的测试代码如下 : 1.新建表test create table test( field1 int not null ) TYPE=MyISAM ; insert into test(field1) values(1); 2.删除已存在的存储过程: -- 删除储存过程 delimiter // -- 定义结束符号 drop procedure p_test; 3.mysql存储过程定义: create p

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

    1.MySQL中的BLOB类型 Mysql中可以存储大文件数据,一般使用的BLOB对象.如图片,视频等等. BLOB是一个二进制大对象,可以容纳可变数量的数据.因为是二进制对象,所以与编码方式无关.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. 四种字段类型保存的最大长度如下: 复制代码 代码如下: TINYBLOB - 255 bytes BLOB - 65535 bytes(64KB) MEDIUMBLOB - 16,

  • java实现爬虫爬网站图片的实例代码

    第一步,实现 LinkQueue,对url进行过滤和存储的操作 import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; public class LinkQueue { // 已访问的 url 集合 private static Set<String> visitedUrl = Collecti

  • Java读取网页内容并下载图片的实例

    Java读取网页内容并下载图片的实例 很多人在第一次了解数据采集的时候,可能无从下手,尤其是作为一个新手,更是感觉很是茫然,所以,在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长.   示例代码: import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Fil

  • Java实体类实现链式操作实例解析

    这篇文章主要介绍了Java实体类实现链式操作实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 原来是这么写bean的,单纯的使用get.set方法,再加一个toString package Model; /** * @author: Davion * @date: 2019/12/11 * @description: */ public class User { private Integer id; private String nam

  • java 数据库连接与增删改查操作实例详解

    本文实例讲述了java 数据库连接与增删改查操作.分享给大家供大家参考,具体如下: 1.设置数据库的基本配置信息 package mysql; //数据库配置资源连接 public final class DbConfig { //数据库资源 指定所使用的数据库类型 地址 端口 数据库名称 编码格式 public final static String dbUrl = "jdbc:mysql://localhost:3306/database_name?useUnicode=true&c

  • Java数组传递及可变参数操作实例详解

    本文实例讲述了Java数组传递及可变参数操作.分享给大家供大家参考,具体如下: 方法可以操作传递和返回基本数据类型,但是方法中也可用来传递和返回数组.如果要向方法中传递一个数组,则方法的接收参数处必须是符合其类型的数组.而且数组属于引用数据类型,所以在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果都是会保存下来的. 向方法中传递数组 在java中,所有对象都是通过引用进行操作的.而数组也是一种对象,当把数组作为参数传递给方法时,传递的实际上就是数组对象的引用.在方法中对数组的所有

  • MySQL子查询操作实例详解

    本文实例总结了MySQL子查询操作.分享给大家供大家参考,具体如下: 定义两个表tb1和tb2 CREATE table tbl1 ( num1 INT NOT NULL); CREATE table tbl2 ( num2 INT NOT NULL); 向两个表中插入数据: INSERT INTO tbl1 values(1), (5), (13), (27); INSERT INTO tbl2 values(6), (14), (11), (20); any some关键字的子查询 SELE

  • java GUI编程之监听操作实例分析

    本文实例讲述了java GUI编程之监听操作.分享给大家供大家参考,具体如下: 当点击Frame中的component组件时,会产生相应的效果,但是相应的其必须进行监听,确定是那个对象,那种操作,但是如果用cup进行主动的监听就会消耗大量的资源,所以有了被动的监听,即对应的事件发生后会自动的执行相关的代码. Button监听: instance 1: import java.awt.*; import java.awt.event.*; public class MoniterStart { p

  • mysql用户管理操作实例分析

    本文实例讲述了mysql用户管理操作.分享给大家供大家参考,具体如下: 本文内容: 用户的介绍 查看用户 创建用户帐户 修改账户 删除帐户 关于匿名用户 首发日期:2018-04-19 用户的介绍: mysql的客户端连接是以用户名来登录服务端. 服务端可以对用户的权限来进行更改,所以每个用户对数据库或对数据表的权限都是不一样的. 一般来说不应该使用root用户登录,因为root用户拥有最高的权限,可以进行删除数据库等"危险"操作.为了安全,应该使用其他用户登录,并且给他分配合适的权限

  • mysql慢查询操作实例分析【开启、测试、确认等】

    本文实例讲述了mysql慢查询操作.分享给大家供大家参考,具体如下: mysql有些sql会执行很慢,有可能造成服务器负载飙升 首先查询 确定影响负载的是mysql ,使用top命令,ps命令等 其次,进入MySQL,使用show full processlist查询执行中的sql语句,看看问题,使用explain 命令 查看状态 最后找出sql语句杀死或者优化 centos7上面安装mariadb服务 yum -y install mariadb-server mariadb-devel 开启

随机推荐