我正在进行一个使用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中运行我的测验时,它不会给出任何错误。当我编译它时,它不会给出任何错误(打包所需的库)。一旦我在commandprompt中启动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添加到我的classpathvariables: database connection not working in jar, but does work in eclipse
现在我是一名初级Java程序员,我可能在上面的列表中做错了。但是,我希望有人可以了解实际导致此错误发生的原因。
答案 0 :(得分:0)
这似乎是Prohibited package name: java的重复,但是你说你改变了你的包名。
如果您没有将软件包名称从java更改为其他名称,请尝试更改它。否则,删除你的jar文件并重建。