我写了一个在HQSQLDB中访问表的基本代码。
import java.sql.*;
public class FirstSQLAccess {
public static void main(String[] args) {
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection("jdbc:hsqldb:file:./database/firstSQLAccess/;shutdown=true;hsqldb.lock.file=false", "sa", "");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM PERSON");
while (rs.next()) {
System.out.println("Name: " + rs.getInt(1));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
问题是它不能正常工作,因为它给出了这个例外
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PERSON
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at FirstSQLAccess.main(FirstSQLAccess.java:24)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PERSON
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 3 more
Exception in thread "main" java.lang.NullPointerException
at FirstSQLAccess.main(FirstSQLAccess.java:36)
以下是数据库菜单中的凭据:
数据库菜单
这些是我的数据库文件夹中的文件:
文件夹
如果表名写正确、小写字母、错误的 URL 等等,我检查了所有可能的情况,但我只是找不到我的代码有什么问题,因为我以前做过这样,它不应该像那样行动。
任何帮助或批评都值得赞赏
您正在使用数据库的相对路径。如果从不同的目录执行 Java 命令,则会导致生成多个数据库。
URL 的其他问题是使用hsqldb.lock.file=false
如果有多个进程访问数据库,则不应使用。
第三个问题是使用空字符串作为数据库名称。
网址可以jdbc:hsqldb:file:./database/firstSQLAccess/db;shutdown=true
。如果在数据库已从另一个进程打开时尝试连接到数据库,则会收到错误。