Java - 由于禁止包名称执行jar失败:java.sql

时间:2018-02-27 15:58:14

标签: java sqlite jdbc

我正在进行一个使用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程序员,我可能在上面的列表中做错了。但是,我希望有人可以了解实际导致此错误发生的原因。

1 个答案:

答案 0 :(得分:0)

这似乎是Prohibited package name: java的重复,但是你说你改变了你的包名。

如果您没有将软件包名称从java更改为其他名称,请尝试更改它。否则,删除你的jar文件并重建。