Java连接SQLite抛出SQLException:表students不存在但实际已创建
Java连接SQLite提示表不存在的排查方案
问题描述
我正在学习Java数据库实现,选用SQLite开发,已经下载驱动并配置到类路径,通过命令行创建了包含dept和students表的univ数据库。但运行Java代码查询students表时,始终抛出SQLException提示表不存在,多次检查路径和表结构都没找到问题,无法继续学习JDBC。
代码
import java.sql.*; public class Main { public static void main(String[] args) { try { Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:C://sqlite//univ"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from students"); while (rs.next()) { System.out.print(rs.getInt("rollno") + " "); System.out.print(rs.getString("name") + " "); System.out.print(rs.getString("city") + " "); System.out.print(rs.getInt("deptno") + " "); } stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
错误信息
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL错误或数据库缺失(no such table: students) at org.sqlite.core.DB.newSQLException(DB.java:1179) at org.sqlite.core.DB.newSQLException(DB.java:1190) at org.sqlite.core.DB.throwex(DB.java:1150) at org.sqlite.core.NativeDB.prepare_utf8(Native Method) at org.sqlite.core.NativeDB.prepare(NativeDB.java:135) at org.sqlite.core.DB.prepare(DB.java:264) at org.sqlite.jdbc3.JDBC3Statement.lambda$executeQuery$1(JDBC3Statement.java:87) at org.sqlite.jdbc3.JDBC3Statement.withConnectionTimeout(JDBC3Statement.java:458) at org.sqlite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:85) at Main.main(Main.java:13)
排查步骤
确认数据库文件路径匹配
SQLite的JDBC驱动如果找不到指定路径的数据库文件,会自动创建一个空的新数据库。你需要用SQLite命令行工具验证C:\sqlite\univ这个文件是否是你之前创建的那个:- 打开命令行,执行
sqlite3 C:\sqlite\univ - 输入
.tables查看所有表,确认是否存在students
如果这里看不到表,说明Java代码连接的是一个新生成的空库,你需要找到命令行创建的univ数据库的实际路径,替换到JDBC URL中。
- 打开命令行,执行
检查表名大小写与引号问题
SQLite在Windows下默认大小写不敏感,但如果创建表时使用了双引号(比如CREATE TABLE "Students" (...)),查询时必须严格匹配大小写和引号。可以在SQLite命令行中执行.schema students(或.schema Students)查看表的实际定义,确保代码中的表名完全一致。临时调试:查看当前数据库的所有表
在代码中添加一段查询,打印当前连接的数据库里的所有表,确认是否真的没有students:// 在创建Statement后添加这段代码 ResultSet tableRs = stmt.executeQuery("SELECT name FROM sqlite_master WHERE type='table';"); System.out.println("当前数据库中的表:"); while (tableRs.next()) { System.out.println("- " + tableRs.getString("name")); } tableRs.close();运行后如果输出里没有
students,说明确实连接到了错误的数据库文件。
内容的提问来源于stack exchange,提问作者g3njac
相关产品推荐
相关产品推荐

