【问题标题】:connecting with Derby from within the java application从 Java 应用程序中与 Derby 连接
【发布时间】:2014-06-02 08:44:06
【问题描述】:

当我在 netbeans 的“服务”选项卡下连接 java db 时,该程序运行良好,但是当我尝试在 netbeans 之外打开 prog 的可执行 jar 文件时,它根本不起作用。我希望这个 java 应用程序可以被多个用户访问,因为我希望把它放在我的本地网络上,所以我想我需要以网络模式连接到 Derby 数据库....我正确吗.?.... .我应该如何解决这个问题..?以下是我的应用程序的代码片段

 public void DoConnect() {
    try {
        /*
         **  Load the Derby driver. 
         **     When the embedded Driver is used this action start the Derby engine.
         **  Catch an error and suggest a CLASSPATH problem
        */
      Class.forName("org.apache.derby.jdbc.ClientDriver");
        try {NetworkServerControl server = new NetworkServerControl();
        server.start (null);}
        catch(Exception e)
        {
            System.err.println(e.getMessage());
        }
        System.out.println(driver + " loaded. ");
    } catch (java.lang.ClassNotFoundException e) {
        System.err.print("ClassNotFoundException: ");
        System.err.println(e.getMessage());
        System.out.println("\n    >>> Please check your CLASSPATH variable   <<<\n");
    }

    try {
        //CONNECT TO THE DATABASE
        String host = "jdbc:derby://localhost:1527/Employee";
        String uName = "admin";
        String uPass = "admin";

        //EXECUTE SQL QUERY AND LOAD RESULTSET
        con = DriverManager.getConnection(host, uName, uPass);
        stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
        String SQL = "SELECT * FROM Workers";
        rs = stmt.executeQuery(SQL);

        //MOVE CURSOR TO FIRST RECORD AND GET DATA
        rs.next();
        int id_col = rs.getInt("ID");
        String id = Integer.toString(id_col);
        String first_name = rs.getString("First_Name");
        String last_name = rs.getString("Last_Name");
        String job = rs.getString("Job_Title");

        //DISPLAY THE FISRT RECORD IN THE TEXT FIELD
        textID.setText(id);
        textFirstName.setText(first_name);
        textLastName.setText(last_name);
        textJobTitle.setText(job);
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

【问题讨论】:

  • 在我重建项目时添加第一个try catch块后......应用程序的jar文件甚至没有启动......
  • “甚至没有开始”是什么意思?它会抛出异常吗?异常包含大量信息:wiki.apache.org/db-derby/UnwindExceptionChain
  • @BryanPendleton 使用上面的代码,当我尝试在 netbeans 之外运行可执行 jar 文件时,什么都没有发生.....如果我删除第一个 try catch 块,那么我得到了我创建的 Jframe我运行了 jar 文件,但没有与我使用 netbeans 服务创建的 Employee 数据库建立任何连接......无论有没有第一个 try catch 块,代码在 netbeans 环境中都可以正常工作......
  • @BryanPendleton 请帮忙....

标签: java database database-connection derby


【解决方案1】:

恕我直言,在网络模式下使用 Derby 数据库在同一应用程序中启动服务器是不好的做法。你结合了两个世界的所有弱点:

  • 您无法从外部访问数据库(您的服务器必须是本地的)
  • 如果您的服务器已全部运行(如果同一节点上多次执行)会发生什么?

我认为它在 Netbeans 下工作得很好,因为 Netbeans 会为你做所有的家务:当你通过 Netbeans 接口访问它时启动服务器,并在关闭 Netbeans 时关闭它。

我认为你应该尝试以下方法:

  • 从应用程序外部(手动)启动服务器
  • 从您的应用中删除启动服务器的代码

(完成后不要忘记停止服务器...)

顺便说一句,我不明白你所说的“甚至没有启动”是什么意思:如果你从命令行启动它,你至少应该有一条错误消息......

【讨论】:

  • 我正在用 java 开发应用程序,以便最好的数据库服务器(考虑到服务器应该很容易在 localhost 上处理,因为我是使用数据库的新手)。通过“甚至没有开始”我的意思是我试图通过双击打开文件而不是从命令行打开它.....
  • 如果是简单的应用程序,可以在网络模式下使用Derby……只要在应用程序之外启动即可。如果你需要一流的数据库,Mysql、MariaDB 或 postgreSQL 都是众所周知的开放式数据库。但是在测试 java 应用程序时总是从命令行启动它,这样你就可以向潜在的帮助者提供错误消息:-)
【解决方案2】:

您编写程序的方式没有理由干涉服务选项卡。您应该能够直接在 NB 中运行(调试)程序。设置断点,调试并单步执行。当这可行时,您可以尝试从命令行运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2011-06-02
    相关资源
    最近更新 更多