我正在使用 sqlite-jdbc-3.21.0.jar 驱动程序进行多项选择测验。你可以在这里找到它: https://bitbucket.org/xerial/sqlite-jdbc/downloads/
我创建了一个名为 Database 的类来处理与 SQLite 相关的所有内容:
package quizpack;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Database {
Console cnsl = new Console();
ResultSet rs = null;
Connection connection = null;
Statement stmt = null;
public Connection connect() {
try {
connection = DriverManager.getConnection("jdbc:sqlite:./data/data.db");
Class.forName("org.sqlite.JDBC");
} catch (Exception e) {
cnsl.println("connect() error: " + e.getMessage());
}
return connection;
}
}
当我在 Eclipse 中运行测验时,它没有给出任何错误。当我编译它时,它不会给出任何错误(打包所需的库)。一旦我在命令提示符下启动 jar 文件,我就会收到消息:禁止的包名称:java.sql。 那将是:java.lang.SecurityException:禁止的包名称:java.sql
这是 connect() 错误的堆栈跟踪:
connect() error: Prohibited package name: java.sql
java.lang.SecurityException: Prohibited package name: java.sql
at java.base/java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
at java.base/java.net.URLClassLoader.defineClass(Unknown Source)
at java.base/java.net.URLClassLoader.access$100(Unknown Source)
at java.base/java.net.URLClassLoader$1.run(Unknown Source)
at java.base/java.net.URLClassLoader$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at quiz.Database.connect(Database.java:21)
at quiz.Database.buildQuery(Database.java:51)
at quiz.Quiz.<init>(Quiz.java:22)
at quiz.Main.main(Main.java:13)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ
e Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknow
n Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Un
known Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
我尝试过的: 更改包名称。 更改我的构建路径的顺序。 尝试了几个将驱动程序 jar 放在源文件夹中的位置。 签署我导出的 jar。 将 jar 添加到我的类路径变量中: database connection not working in jar, but does work in eclipse
现在我是一名初级 Java 程序员,我可能做错了上面的列表。但我希望有人能够阐明到底是什么导致了这个错误的发生。
请您参考如下方法:
这似乎是 Prohibited package name: java 的重复,但你说你改变了你的包名称。
如果您没有将包名称从 java 更改为其他名称,请尝试更改它。否则,删除您的 jar 文件并重建。