我的Java exe无法连接到sql数据库,但是如果我使用我的IDE,它就可以工作

时间:2018-12-14 07:32:05

标签: java mysql jdbc netbeans

我使用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");
        }
    }

2 个答案:

答案 0 :(得分:0)

直接在问题的评论中进行讨论:

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

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

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

编辑:

由于您正在使用Netbeans,因此Netbeans似乎没有eclipse那样的Option。因此,您对我的选择2

感到困惑

答案 1 :(得分:0)

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

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

enter image description here

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

确保您在项目的Run部分中定义了一个Main Class。

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