我正在学习java,已经开始学习数据库实现。我决定使用 SQLite,并且已经下载了 .jav 文件,将其放置在类路径中,并在命令提示符中使用它来创建一个包含两个表的数据库:dept 和 Students。 当我尝试在 java 中运行一些简单的代码时,我总是收到一个 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 error or missing database (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)
任何帮助将不胜感激。
所以问题实际上出在文件路径中,它指定了“univ”而不是“univ.db”。这让我很困惑,因为尽管出现了错误,但连接仍在建立,所以我在其他地方寻找问题。创建数据库时,它创建了 univ 和 univ.db,无论 univ 是什么,它都没有我创建的表。
conn = DriverManager.getConnection("jdbc:sqlite:C:/sqlite/univ.db");