将图片存储到mysql数据库[通俗易懂]
2023-06-13 09:12:30 时间
大家好,又见面了,我是你们的朋友全栈君。
正常的图片储存要么放进本地磁盘,要么就存进数据库。存入本地很简单,现在我在这里记下如何将图片存进mysql数据库
如果要图片存进数据库 要将图片转化成二进制。
1.数据库存储图片的字段类型要为blob二进制大对象类型
2.将图片流转化为二进制
下面放上代码实例
一、数据库
CREATE TABLE `photo` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`photo` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、数据库链接
/**
*
*/
package JdbcImgTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @author Administrator
*
*/
public class DBUtil
{
// 定义数据库连接参数
public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/test";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";
// 注册数据库驱动
static
{
try
{
Class.forName(DRIVER_CLASS_NAME);
}
catch (ClassNotFoundException e)
{
System.out.println("注册失败!");
e.printStackTrace();
}
}
// 获取连接
public static Connection getConn() throws SQLException
{
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
// 关闭连接
public static void closeConn(Connection conn)
{
if (null != conn)
{
try
{
conn.close();
}
catch (SQLException e)
{
System.out.println("关闭连接失败!");
e.printStackTrace();
}
}
}
//测试
/* public static void main(String[] args) throws SQLException
{
System.out.println(DBUtil.getConn());
}
*/
}
三、图片流
package JdbcImgTest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author Administrator
*
*/
public class ImageUtil
{
// 读取本地图片获取输入流
public static FileInputStream readImage(String path) throws IOException
{
return new FileInputStream(new File(path));
}
// 读取表中图片获取输出流
public static void readBin2Image(InputStream in, String targetPath)
{
File file = new File(targetPath);
String path = targetPath.substring(0, targetPath.lastIndexOf("/"));
if (!file.exists())
{
new File(path).mkdir();
}
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(file);
int len = 0;
byte[] buf = new byte[1024];
while ((len = in.read(buf)) != -1)
{
fos.write(buf, 0, len);
}
fos.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (null != fos)
{
try
{
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
四、转码存储
package JdbcImgTest;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author Administrator 测试写入数据库以及从数据库中读取
*/
public class ImageDemo
{
// 将图片插入数据库
public static void readImage2DB()
{
String path = "D:/Eclipse/eclipseWorkspace/TestProject/Img/mogen.jpg";
Connection conn = null;
PreparedStatement ps = null;
FileInputStream in = null;
try
{
in = ImageUtil.readImage(path);
conn = DBUtil.getConn();
String sql = "insert into photo (id,name,photo)values(?,?,?)";
ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ps.setString(2, "Tom");
ps.setBinaryStream(3, in, in.available());
int count = ps.executeUpdate();
if (count > 0)
{
System.out.println("插入成功!");
}
else
{
System.out.println("插入失败!");
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
DBUtil.closeConn(conn);
if (null != ps)
{
try
{
ps.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
// 读取数据库中图片
public static void readDB2Image()
{
String targetPath = "C:/Users/Jia/Desktop/mogen.jpg";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
{
conn = DBUtil.getConn();
String sql = "select * from photo where id =?";
ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
rs = ps.executeQuery();
while (rs.next())
{
InputStream in = rs.getBinaryStream("photo");
ImageUtil.readBin2Image(in, targetPath);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
DBUtil.closeConn(conn);
if (rs != null)
{
try
{
rs.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
if (ps != null)
{
try
{
ps.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}
//测试
public static void main(String[] args)
{
//readImage2DB();
readDB2Image();
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158080.html原文链接:https://javaforall.cn
相关文章
- MySQL动态分表实现数据库优化(mysql动态分表)
- MySQL Variables session_track_state_change 数据库 参数变量解释及正确配置使用
- 查询MySQL数据库系统:图书查询功能(mysql数据库图书)
- Mysql:新特性探索 — 分支版本(mysql分支版本)
- 优化MySQL库表优化:加快数据库性能运行(mysql库表)
- 深入浅出Java配置MySQL数据库(java配置mysql)
- Yum安装MySQL极速升级(yum升级mysql)
- 利用 MySQL 存储过程结果实现简单输出(mysql存储过程输出)
- 如何打开MySQL中的数据库(mysql打开某个数据库)
- GTID技术:MySQL数据库高可用的重要支撑(gtidmysql)
- MySQL动态列,数据变幻莫测,如何正确存储查询?(mysql动态列)
- MySQL索引优化,提升数据库性能(mysql索引与优化)
- MySQL 变量命名规范与实践(mysql变量命名)
- MySQL交互:探索数据库的世界(mysql交互)
- MySQL中文查询乱码解决方案(mysql中文查询乱码)
- MySQL索引碎片优化:提升数据库性能(mysql索引碎片)
- MySQL中实现跨数据库事务的方法(mysql跨数据库事务)
- 如何使用MySQL查询指定时间段的数据?(mysql数据库时间查询)
- 探讨MySQL的数据存储类型(mysql数据存储类型)
- MySQL 简介:数据库开源查询语言参考指南(mysql大全)
- MySQL优化如何使用缓存提高数据库性能(mysql 中使用缓存)
- C 语言使用 MySQL 数据库连接池技术解决方案(c 使用mysql链接池)
- MySQL表导出快捷方式使用C程序(c mysql表导出)
- 使用CI框架中MySQL DSN快速搭建数据库应用(ci mysql dsn)
- MySQL中AS关键字的作用(as 在mysql的作用)
- MySQL 数据库追加操作实现(append mysql)
- 解决MySQL鼠标不显示问题(mysql不显示鼠标)