ySQL 中,BLOB 是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据
插入 BLOB 类型的数据必须使用 PreparedStatement,因为 BLOB 类型的数据无法使用字符串拼写的
MySQL 的四种 BLOB 类型(除了在存储的最大信息上不同外,它们是等同的)
实际使用中根据需要存入的数据大小定义不同的 BLOB 类型
需要注意的是:如果存储文件过大,数据库的性能会下降
如果在指定了相关的 Blob 类型以后,还报错:xxx too large 或者 Out of sort memory, consider increasing server sort buffer size,那么在 mysql 的安装目录下,找 my.ini 文件加上如下的配置参数:max_allowed_packet=16M 。同时注意:修改了 my.ini 文件之后,需要重新启动 mysql 服务
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.DriverManager;
import java.util.Properties;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class BlobTest {
public static void main(String[] args) throws Exception {
//1.读取文件中的信息
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
//将用户名和密码封装在Properties中
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//2.加载驱动
Class.forName(driverClass);
//3.获取连接
Connection conn = (Connection) DriverManager.getConnection(url, user, password);
String sql = "insert into customers(name,email,birth,photo)values(?,?,?,?)";
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
ps.setObject(1, "远1212");
ps.setObject(2, "1321@qq.com");
ps.setObject(3, "2022-09-23");
FileInputStream is1 = new FileInputStream(new File("ybl1.png"));
ps.setBlob(4, is1);
ps.execute();
conn.close();
ps.close();
}
}