You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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这个文件是否是你之前创建的那个:

    1. 打开命令行,执行sqlite3 C:\sqlite\univ
    2. 输入.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:57:34