java - 尽管查询在 SQLiteStudio 中正确生成结果,但 ResultSet 返回空
问题描述
语境:
使用sqlite3制作的本地数据库,称为lims.db,其中包含一个名为privLevels的表,其中列user存储用户名,级别存储从 0 到 2 的整数,但作为字符串。
privLevels
~~~~~~~~~~~~~~
user | level
~~~~~~~~~~~~~~
admin | 0
john | 1
kevin | 2
susan | 1
我正在尝试在此表上运行SQL SELECT查询,然后将结果传递给 Map 对象,其中来自用户的值是键,来自级别的值是值。
privMap
~~~~~~~~~~~~~~~
<"admin" = "0">
<"john" = "1">
<"kevin" = "2">
<"susan" = "1">
我遇到的问题是生成的ResultSet被返回为完全空的。下面代码中的 while 循环永远不会运行,并且在 IntelliJ 调试器中,ResultSet对象是空的。在SQLiteStudio中,查询运行正确。在我的其余代码中,语句运行良好,但查询却不行。
代码:
getPrivMapFromDatabase() 应该可以工作 - 如果ResultSet包含任何内容。它从用户和级别获取值,然后将它们 .puts() 放入地图中。
public void getPrivMapFromDatabase() {
ResultSet results = Base.getStringMapFromDatabase("privLevels", "user", "level");
try {
while(results.next()) {
String user = results.getString("user");
System.out.println(user);
String level = results.getString("level");
System.out.println(level);
privMap.put(user, level);
}
}
catch (SQLException e) {
System.out.println("[EXCEPTION] " + e.getMessage());
e.printStackTrace();
}
}
这些方法在“Base”类中。
我这样写getStringMapFromDatabase()因为我需要对另一个表和地图做同样的事情。它应该生成字符串(我检查过它在语法上是正确的)然后执行它。
executeQuery()应该只运行查询,然后将ResultSet 返回到getPrivMapFromDatabase()。但是,ResultSet对象是空的。CREATE / INSERT 语句工作正常(使用单独的方法运行语句)。
private static String url = "jdbc:sqlite:C:/Users/#My_Username#/IdeaProjects/#Project_Name#/sqlite/db/lims.db";
//Username and project name redacted
public static ResultSet getStringMapFromDatabase(String table, String keyColumn, String valueColumn) {
String sql = "SELECT " + keyColumn + ", " + valueColumn + " FROM " + table + ";";
return executeQuery(sql);
}
public static ResultSet executeQuery(String sql) {
ResultSet results = null;
try (Connection connection = DriverManager.getConnection(url);
Statement statement = connection.createStatement()) {
results = statement.executeQuery(sql);
}
catch (SQLException exception) {
System.out.println("[EXCEPTION] " + exception.getMessage());
}
return results;
}
即使查询在 SQLiteStudio 中运行良好且其他语句正常工作,为什么 ResultSet 仍为空?表名和列名正确。
解决方案
推荐阅读
- reactjs - 未处理的拒绝 (FirebaseError):使用无效数据调用的函数 addDoc()
- python - 芹菜工人如何在 Heroku 中进行交流
- c# - 返回列表基本 c 锐利
- python - 在 python 仪表板代码中创建一个下拉菜单,将值的计算存储在表中
- python - 有谁知道如何从 cardconnect/cardpointe 支付网关集成开始?
- delphi - 如何根据需要设置带实时绑定的字段
- c - 使用 getchar() 时出现意外输入,使用 putchar() 时出现意外输出
- python - 为什么在单元测试期间无法读取环境变量?
- ios - 不再支持代码签名版本
- qemu - qemu-system-aarch64:../accel/tcg/cpu-exec.c:681:cpu_loop_exec_tb:断言“icount_enabled()”失败