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表结构。
id | int(11) | YES |
photo | mediumblob | YES |
保存与读取图片的代码如下:
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
Java实现对Mysql的图片存取操作的更多相关文章
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- Java实现对zip和rar文件的解压缩
通过java实现对zip和rar文件的解压缩
- 实现对MySQL数据库进行分库/分表备份(shell脚本)
工作中,往往数据库备份是件非常重要的事情,毕竟数据就是金钱,就是生命!废话不多,下面介绍一下:如何实现对MySQL数据库进行分库备份(shell脚本) Mysq数据库dump备份/还原语法: mysq ...
- Java实现MySQL图片存取操作
转载自:http://blog.csdn.net/thc1987/article/details/3972201 存入操作 /* ---------------表结构------------ 表名:s ...
- Java如何实现对Mysql数据库的行锁
场景如下: 用户账户有余额,当发生交易时,需要实时更新余额.这里如果发生并发问题,那么会造成用户余额和实际交易的不一致,这对公司和客户来说都是很危险的. 那么如何避免: 网上查了下,有 ...
- java(2014)实现对mysql数据库分页的代码
package util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultS ...
- c++简单实现对mysql数据库操作
1.连接数据库 #include <mysql.h> #include <iostream> #include<string> #include<vector ...
- Jmeter实现对mysql的增、删、改、查
1. 创建一个存储过程,语句如下: DELIMITER $$; DROP PROCEDURE IF EXISTS test; create PROCEDURE test() BEGI ...
随机推荐
- Vue中directives的用法
关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directives做权限按钮的功能 ###1. d ...
- structs2的action实现方式
Action的实现方式第一种:在web.xml中添加配置<filter> <filter-name>struts2</filter-name> <filter ...
- python脚本获取本机公网ip
1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.python脚本实现: #!/usr/bin/python # -*- coding:utf8 -*- ...
- Spring Boot 结合 Redis 缓存
Redis官网: 中:http://www.redis.cn/ 外:https://redis.io/ redis下载和安装 Redis官方并没有提供Redis的Windows版本,这里使用微软提供的 ...
- iOS 11开发教程(十一)了解iOS11应用视图
iOS 11开发教程(十一)了解iOS11应用视图 在iPhone或者iPad中,用户看到的和摸到的都是视图.视图是用户界面的重要组成元素.本节将主要讲解视图的添加.删除以及位置和大小的设置等内容. ...
- 1006 Sign In and Sign Out (25)(25 point(s))
problem At the beginning of every day, the first person who signs in the computer room will unlock t ...
- 支撑大规模公有云的Kubernetes改进与优化 (3)
这一篇我们来讲网易为支撑大规模公有云对于Kubernetes的定制化. 一.总体架构 网易的Kubernetes集群是基于网易云IaaS平台OpenStack上面进行部署的,在外面封装了一个容器平台的 ...
- Python实现QQ自动点赞
用Python做一个QQ自动点赞神器,上代码: 1 def QQZan(qq): 2 browser = webdriver.Chrome() 3 browser.maximize_window() ...
- string rune byte 的关系
在Go当中 string底层是用byte数组存的,并且是不可以改变的. 例如 s:="Go编程" fmt.Println(len(s)) 输出结果应该是8因为中文字符是用3个字节存 ...
- C# CuttingEdge.Conditions 验证帮助类库 文档翻译
项目主页: https://archive.codeplex.com/?p=conditions 作者博客关于项目的文档(翻译原文): https://www.cuttingedge.it/blogs ...