JDBC-mysql与java的图片传输
一、如何通过JDBC在mysql与java中传输图片?
1、详细步骤:
- 注册驱动
- 连接mysql数据库
- 通过驱动管理类的静态方法getconnection,与mysql的服务器建立连接,/并返回一个connection的连接对
- 编写sql语句
- 需要把sql传输给数据库,需要prepareStatement的对象,通过connection创建prepareStatement对象
- 设置?的值
- 把sql语句传给服务器
- 释放连接
2、代码实现
package com.atguigu.course.test06;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
System.out.println("请输入编号");
int id = input.nextInt();
System.out.println("请输入名字");
String name = input.next();
//读取照片路径
System.out.println("请输入照片路径");
String p = input.next();
/*
当我们指定的照片比较大的时候,出现了以下的问题:
1、com.mysql.jdbc.PacketTooBigException:Packet for query is too large (6662709 > 4194304).You can change this value on the server(服务器) by setting the max_allowed_packet' variable.
2、com.mysql.jdbc.MysqlDataTruncation: Data truncation(截断): Data too long for column 'photo' at row 1
每一种blob有各自大小限制:
tinyblob:255字节
blob:65k
mediumblob:16M
longblob:4G
*/
//第一步:注册驱动
Class.forName("com.mysql.jdbc.Driver");
//第二步:连接mysql数据库
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
//读取文件内容,文件以数据流的形式进行传递
FileInputStream file = new FileInputStream(p);
//第三步:通过驱动管理类的静态方法getconnection,与mysql的服务器建立连接
//并返回一个connection的连接对象
Connection connection = DriverManager.getConnection(url, user, password);
//第四步:编写sql
String sql = "insert into l values (?,?,?)";
//第五步:需要把sql传输给数据库,需要prepareStatement的对象,通过connection创建prepareStatement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//第六步:设置?的值
preparedStatement.setObject(1,id);
preparedStatement.setObject(2,name);
preparedStatement.setObject(3,file);//直接把输入流给他,输入流中有照片的内容
//第七步:把sql语句传给服务器
int len = preparedStatement.executeUpdate();
System.out.println(len>0?"添加成功":"添加失败");
//第八步:释放连接
file.close();
preparedStatement.close();
connection.close();
}
}
二、其中有两个问题需要注意:
1.是关于mysql中传输最大值得设置
由于对文件大小的限制,太大的文件无法传递
2.关于数据库中设置的blob
每一种blob有各自大小限制:
- tinyblob:255字节
- blob:65k
- mediumblob:16M
- longblob:4G