本文使用的数据表如下,我们想在其中添加图片(Blob)类型的数据

目录
MySQL 中,BLOB 是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据
插入 BLOB 类型的数据必须使用 PreparedStatement,因为 BLOB 类型的数据无法使用字符串拼写的
MySQL 的四种 BLOB 类型(除了在存储的最大信息上不同外,它们是等同的)
| 类型 | 大小(单位:字节) |
| TinyBlob | 最大 255 |
| Blob | 最大 65K |
| MediumBlob | 最大 16M |
| LongBlob | 最大 4G |
实际使用中根据需要存入的数据大小定义不同的 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, "远坂凛");
- ps.setObject(2, "ybl@qq.com");
- ps.setObject(3, "2000-01-01");
-
- FileInputStream is1 = new FileInputStream(new File("ybl1.png"));
- ps.setBlob(4, is1);
- ps.execute();
- conn.close();
- ps.close();
- }
- }
执行代码,插入成功
