【发布时间】:2018-03-24 20:10:09
【问题描述】:
我在从 SQLite 数据库加载对象时遇到问题。
首先,这是我的表定义:
CREATE TABLE MyTable (
rowid INTEGER PRIMARY KEY,
data BLOB
);
这是我要存储和重新加载的简单类:
public class MyHashMap extends HashMap<String, Integer> {
private static final long serialVersionUID = 0L;
}
然后我用一些数据填充地图,并使用 SQL INSERT 语句将其存储在数据库中。一切正常,如果我执行 SELECT(使用 sqlite3 命令行客户端),我将看到正确的信息。
现在我正在使用 java.sql 包来加载对象:
String sql = "SELECT data FROM MyTable WHERE rowid = 1";
MyHashMap map = null;
try {
try (Statement stmt = db.createStatement()) {
try (ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) {
map = rs.getObject("data", MyHashMap.class);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
没有抛出异常,但我的地图变量为空。我调试了程序,可以说getObject方法按预期调用了。
【问题讨论】:
-
开启调试模式,将查询显示为真,查看已执行的查询
-
我阅读了链接的线程,但它对我没有帮助,因为我认为不可能将 Blob 接口“转换”为我的 HashMap 对象。
-
可能查询得到了空值。您尝试打印查询结果了吗?