数据库中表数据类型是Blob的处理

一、引用

1.1 varchar和blob的区别

但我们用varchar 255 来存储数据的时候,可能不够用,甚至使用text也不够,那这个时候就可以使用Blob类型

在这里插入图片描述
在这里插入图片描述

1.2 如何在navicat上面查看blob的数据

在这里插入图片描述

二、代码的使用

2.1 方法一:用String接受和存储(推荐,例子)

我们可以定义一个实体类,数据库中blob类型的字段在实体类中定义成String类型;

2.2 方法二:用byte[]接受和存储

我们可以定义一个实体类,数据库中blob类型的字段在实体类中定义成byte[] 类型;

java的byte[] 但是这样数据太长了,所以可以使用ByteBuffer 甚至可以用string类型去取出来
在这里插入图片描述

前端还是传递一个字符串过来,然后我们把字符串转换成byte[] 存储进ByteBuffer;

- 存储
String content = applyDto.getContent();
 ByteBuffer buffer = ByteBuffer.wrap(content.getBytes());
 applyBean.setContent(buffer);


- 取出
//取出来 ByteBuffer转换为字符串
String s = StandardCharsets.UTF_8.decode(buffer).toString();
System.out.println(s);

三、例子

在这里插入图片描述

直接使用字符串String来接受blob

在这里插入图片描述

我们定义一个contentvo,来作为存储和接受这个blob字段的数据

在这里插入图片描述

实体类的代码(mybatisplus)

JSONArray itemArray = new JSONArray();
                for (MaterialDateZoneListItem totalItem : totalItems) {
                    JSONObject jsonObject = new JSONObject();
                    List<Long> materialprogram = totalItem.getMaterialprogram();
                    jsonObject.put("startDate", totalItem.getStartdate());
                    jsonObject.put("endDate", totalItem.getEnddate());
                    jsonObject.put("mediaList", totalItem.getMd());
                    jsonObject.put("gcdNumber", totalItem.getGCDnumber());
                    jsonObject.put("idsSize", materialprogram.size());
                    jsonObject.put("ids", materialprogram);
                    itemArray.add(jsonObject);
                }

                Item item = new Item();
                item.setUuid(uuid);
                item.setMode(1);
                item.setRemark(remark);
                item.setCreateBy(userId);
                item.setCreateTime(now);
                item.setContent(itemArray.toJSONString());
                itemMapper.insert(item);
                Item item1 = itemMapper.selectList(null).get(2);

                String content1 = item1.getContent();
                List<ItemContentVo> itemContentVos1 = JSONArray.parseArray(content1, ItemContentVo.class);
                System.out.println();
Java 中,使用 JDBC 可以从数据库中读取 BLOB 格式的数据。具体步骤如下: 1. 使用 `java.sql.Connection` 接口获取数据库连接。 ```java Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); ``` 2. 创建 `java.sql.PreparedStatement` 对象,并执行查询。 ```java PreparedStatement pstmt = conn.prepareStatement("SELECT blob_data FROM my_table WHERE id = ?"); pstmt.setInt(1, 1); ResultSet rs = pstmt.executeQuery(); ``` 这里假设我们要查询表 `my_table` 中 `id` 为 1 的记录的 `blob_data` 字段。 3. 从结果集中获取 BLOB 类型的数据,并将其保存到文件中。 ```java if (rs.next()) { Blob blob = rs.getBlob("blob_data"); // 获取 BLOB 类型的数据 InputStream in = blob.getBinaryStream(); // 获取 BLOB 类型数据的二进制流 OutputStream out = new FileOutputStream("output-file.dat"); // 创建输出流 byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); // 将数据写入输出流 } out.close(); in.close(); } ``` 在这个示例中,我们从结果集中获取 BLOB 类型的数据,然后使用 `java.io.InputStream` 将其读取为二进制流,并使用 `java.io.OutputStream` 将其写入到文件中。最后,记得关闭输入输出流。 完整代码示例: ```java import java.io.*; import java.sql.*; public class ReadBlobExample { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); PreparedStatement pstmt = conn.prepareStatement("SELECT blob_data FROM my_table WHERE id = ?"); pstmt.setInt(1, 1); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { Blob blob = rs.getBlob("blob_data"); InputStream in = blob.getBinaryStream(); OutputStream out = new FileOutputStream("output-file.dat"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } out.close(); in.close(); } rs.close(); pstmt.close(); conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值