【问题标题】:My java exe cannot connect to sql database, but if I am use my IDE it works我的 java exe 无法连接到 sql 数据库,但如果我使用我的 IDE,它可以工作
【发布时间】:2019-05-15 11:03:49
【问题描述】:

我使用 NetBeans 8 做了一个项目,我必须连接到 mysql 数据库并在表格中显示内容。 当我使用 IDE 时,连接工作得很好!但是当我清理并构建以创建可执行 jar 时,我的程序无法连接到数据库...... 谁能帮我解决这个问题? 谢谢!

这是我正在使用的代码:

@FXML
    private void loadDB() {
        //cleaning all fields from table View and removing previous elements from studentList before show new content;
        tableView.getItems().clear();
        studentList.removeAll();

        String stg = dataBaseField.getText();
        //Expected string format:
        //jdbc:mysql://mymysql.senecacollege.ca/eden_burton?user=jac444_183a01&password=eqXE@4464

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Error loading the driver" + e);
        }
        try {
            //connecting to the database
            Connection conexao = DriverManager.getConnection(dataBaseField.getText());

            //creating a statement and query to be executed
            Statement myStmt = conexao.createStatement();
            ResultSet result = myStmt.executeQuery("select * from Students");

            //look at the result set
            while (result.next()) {
                Student student_ = new Student(result.getInt("id"), result.getString("name"), result.getString("course"), result.getInt("grade"));
                studentList.addNaLista(student_);
                tableView.setItems(getStudent(studentList.getList()));
            }

            myStmt.close();//closing statement
            result.close();//closing results
            conexao.close();//closing connection

        } //if a connection could not be set.
        catch (SQLException exc) {
            alert("CONNECTION ERROR!", "Please verify your connection string.", "String should be in the following format: " + "\n\njdbc:mysql://mymysql.senecacollege.ca/DATABASENAME?user=USERNAME&password=PASSWORD");
        }
    }

【问题讨论】:

  • 错误是什么?
  • 我们很乐意为您提供帮助,但我们需要更多信息。你如何打包你的 Jar 文件,你通常如何连接到你的数据库,你如何配置你的连接?请在您的问题中包含此信息
  • 如果您的代码在 IDE 中执行时运行良好,我猜您没有正确构建您的 jar。你在使用像 maven/gradle/... 这样的构建系统吗?
  • SQLException: 没有找到适合...的驱动程序
  • 这似乎是一个类路径问题。我们需要知道您是如何创建 exe 文件的。

标签: java mysql jdbc netbeans


【解决方案1】:

取决于问题的cmets中的讨论:

问题是您在运行可执行 jar 时在 JVM 的类路径中缺少 MySQL JDBC jar。它可以在 Eclipse 中运行,因为 IDE 在将依赖项添加到项目并运行其中一个类文件时会负责创建正确的类路径。

如果你从项目中创建一个 jar,eclipse 不会向它添加依赖。你需要自己处理。现在你有两个选择:

  1. 让 Eclipse 将 jar 捆绑到您的可执行 jar 中,如 here 所述
  2. 在运行 jar 时自己创建类路径。您需要将-cp 参数添加到进程调用并列出您的应用程序运行所需的jar。 (参见示例here

编辑:

由于您使用的是 Netbeans,Netbeans 似乎没有像 eclipse 那样的选项。所以你被我的选项2

困住了

【讨论】:

  • 一切都很好,但 OP 使用的是 Netbeans 而不是 Eclipse。
【解决方案2】:

假设您在 Netbeans 中使用基于 Ant 的项目,您可以配置您的项目,以便 NetBeans 将创建一个可运行的 jar 文件并将所有依赖库复制到您项目的 dist 文件夹中。

为此,请启用项目属性的“打包”部分(在“构建”下)中的“复制依赖库”复选框。

屏幕截图是使用 NetBeans 10 拍摄的,但旧版本具有完全相同的选项

确保您在项目的Run 部分中定义了主类。

完成此操作并构建项目后,dist 文件夹将包含 MyApp.jar 和子目录 lib,其中将包含您添加到项目中的所有库。 MyApp.jar 将包含一个 MANIFEST.MF,其中包括您的应用程序 jar 和所有依赖库(位于 lib 目录中),以便您可以使用 java -jar MyApp.jar 启动您的应用程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多