使用Maven+Java8操作SQLite查询时提示表不存在的问题求助
问题分析与解决方案
核心问题点
- SQL语法错误:查询语句中
*和FROM之间缺少空格,SQLite解析时会将*FROM识别为无效标识符,引发语法错误,进而误报"表不存在"。 - PreparedStatement使用错误:调用
pstmt.executeQuery(sql)时传入SQL字符串,会让JDBC忽略预编译语句,直接执行未替换占位符的原始SQL,同时保留语法错误。 - 资源未正确释放:finally块仅注释了关闭逻辑,未实际关闭Connection、PreparedStatement、ResultSet,可能引发连接泄漏或资源占用问题。
修正后的代码
public boolean testSelectQuery(String val1, String val2) { // 修正SQL语句:*和FROM之间添加空格 String sql = "SELECT * FROM test_table WHERE col1 = ? and col2 = ? "; Connection connection = null; ResultSet rs = null; PreparedStatement pstmt = null; try { connection = DriverManager.getConnection("jdbc:sqlite:D:/Clients/Client1/sqlite/clientDb.db"); pstmt = connection.prepareStatement(sql); // 设置参数 pstmt.setString(1, val1); pstmt.setString(2, val2); // 调用无参executeQuery(),使用预编译语句 rs = pstmt.executeQuery(); return rs.isBeforeFirst(); } catch (SQLException e) { e.printStackTrace(); // 打印异常便于排查问题 return false; } finally { // 按顺序关闭资源:ResultSet -> PreparedStatement -> Connection try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (connection != null) connection.close(); } catch (SQLException e) { e.printStackTrace(); } } }
额外验证步骤
- 确认表的存在性:用SQLite可视化工具(如SQLiteStudio)打开
D:/Clients/Client1/sqlite/clientDb.db,检查test_table是否真实存在,避免创建表时连接了其他路径的数据库文件。 - 核对建表代码:确保创建表的代码使用了相同的数据库路径,且执行过程无异常抛出。
内容的提问来源于stack exchange,提问作者user19996345
相关产品推荐
相关产品推荐

