【发布时间】:2021-01-23 20:02:36
【问题描述】:
我正在尝试从 MySQL 数据库中读取 Blob,其中包含一些随机文本。
我的代码如下所示:
Connection conn = DriverManager.getConnection(connection_string);
String message = "Some message";
byte[] messageBytes = message.getBytes("UTF-8");
Blob blob = conn.createBlob();
blob.setBytes(1l,messageBytes);
String sql = "INSERT INTO db.dbname('blob') VALUES ('" + blob + "');"
PreparedStatement pat = conn.prepareStatement(sql);
pat.executeUpdate();
在另一个类中,我有从数据库中读取 blob 字段的代码:
//some SQL code to read the blob field here
Blob readBlob = resultSet.getBlob("blob");
byte[] bytes = readBlob.getBytes(1, (int) readBlob.length());
String str = new String(bytes);
System.out.println(str);
输出为:com.mysql.cj.jdbc.Blob@3be81fc2
我的代码与 StackOverflow 上的一些工作解决方案完全相同,所以我不知道到底哪里出了问题。
【问题讨论】:
-
CLOB 不会比 BLOB 更合适,因为 CLOB 用于字符数据,而 BLOB 用于非字符数据。
-
我也将尝试使用 CLOB,但话又说回来,我不明白为什么我的代码不起作用。
-
您是否在 INSERT 之后(以及在运行从数据库读取的 java 代码之前)检查了输入数据库的值?我的意思是您是否使用 MySQL Workbench 或类似工具检查了该值?此外,方法
executeUpdate()返回更改的行数。在您的情况下,该方法应返回 1(一)。有吗?