在Java应用程序中与Derby连接

时间:2014-06-02 08:44:07

标签: java database database-connection derby

当我在服务'下连接java数据库时,这个程序运行正常。 netbeans中的选项卡,但是当我尝试在neatbeans之外打开prog的可执行jar文件时,它根本不起作用。我希望这个java应用程序可以被多个用户访问,因为我希望将它放在我的本地网络上,所以我想我需要在网络模式下连接到Derby数据库....我是否正确。?.... .how我应该修复这个..?以下是我的应用程序的代码snipet

 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());
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

我认为它在Netbeans下工作正常,因为Netbeans正在为你做所有的内务处理:当你通过Netbeans界面访问它时启动服务器,并在关闭Netbeans时关闭它。

我认为你应该尝试下面的内容:

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

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

顺便说一句,我无法理解你的意思是“甚至不开始”:如果你从命令行启动它,你应该至少有一条错误信息......

答案 1 :(得分:0)

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