如何基于java向mysql数据库中存取图片
这篇文章主要介绍了如何基于java向mysql数据库中存取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
学mysql的时候都是做个表格,放的也都是文字内容,虽然我知道长篇的文章和图片或者视频的都是用过文件夹的方式存储的,再讲文件路径存进数据库中。但还是想试试直接往mysql数据库中存取图片。这里我用的是java语言和jdbc实现的
mysql数据库中有一个类型是Blob类型,这是一个二进制类型,通常我们会将图片或音像文件转成二进制再存入数据库中,Blob分为以下几种:
- TinyBlob最大255
- Blob最大65K
- MediumBlob最大16M
- LongBlob最大4G
除了jdbc的连接以外,我们需要用到文件的输入、输出流。实现两个方法,一个方法向数据库中存图像,另一个方法从数据库中读取图像并存在电脑本地
importjava.io.*;
importjava.sql.*;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.Scanner;
publicclassDatabase{
//JDBC驱动名
StringJDBC_DRIVER="com.mysql.jdbc.Driver";
//数据库URL:这里的tt是数据库名称
StringJDBC_URL="jdbc:mysql://localhost:3306/daImage?useSSL=false&serverTimezone=UTC";
//数据库的用户名与密码
StringUSER="root";
StringPASS="admin123";
//通过DriverManager类获得该连接对象才能访问数据库
Connectionconnection=null;
//通过Connection获得该结果对象用于执行静态的SQL语句
//Statementstatement=null;
PreparedStatementpreparedStatement=null;
Stringpath;
FileInputStreamfileInputStream;
Database(){
//注册JDBC驱动
try{
Class.forName(JDBC_DRIVER);
//数据库的连接:通过DriverManager类的getConnection方法,传入三个参数:数据库URL、用户名、用户密码,实例化connection对象
connection=DriverManager.getConnection(JDBC_URL,USER,PASS);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicvoidadd(){
//定义数据库查询语句:查询aa表中的name、sex两列数据
Stringsql="insertintotaImagevalues(?,?,?)";
//读取图片,图片放在电脑本地,所以我这里手动复制了路径
Filefile=newFile("/Users/liuliu/Desktop/vv.jpeg");
try{
FileInputStreamfi=newFileInputStream(file);
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1,2);
preparedStatement.setString(2,"图片一");
preparedStatement.setBlob(3,fi);
//执行查询语句
intf=preparedStatement.executeUpdate();
if(f>0){
System.out.println("插入成功");
}else{
System.out.println("插入失败");
}
preparedStatement.close();
connection.close();
}catch(SQLExceptione){
e.printStackTrace();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
}
publicvoidselect(){
Blobget_image;
Stringsql="select*fromtaImage";
try{
//将读取到的图片存放到指定的路径中
FileOutputStreamfileOutputStream=newFileOutputStream("/Users/liuliu/Desktop/bb.jpg");
preparedStatement=connection.prepareStatement(sql);
ResultSetresultSet=preparedStatement.executeQuery();
while(resultSet.next()){
get_image=resultSet.getBlob("photo");
//将读取到的Blob对象转成字节流
inputStream=get_image.getBinaryStream();
inta;
byteb[]=newbyte[1014];
while((a=inputStream.read(b))!=-1){
fileOutputStream.write(b,0,a);
}
}
}catch(SQLExceptione){
e.printStackTrace();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。