从代码挂起客户端运行hsqldb

时间:2011-10-21 10:50:38

标签: java hsqldb

好吧,我需要在服务器模式下创建hsqldb并从另一个客户端连接到此服务器(例如来自runManagerSwing.bat)。 这是我的代码:

 public static Server server = new Server();


    public static void main(String[] args) throws IOException, ServerAcl.AclFormatException, SQLException {
        HsqlProperties p = new HsqlProperties();
        p.setProperty("server.database.0", "file:./db/myHsqlDb");
        p.setProperty("server.dbname.0", "idt_simulatordb");
        p.setProperty("server.port", "9001");

        server.setProperties(p);
        server.setSilent(false);
        server.setTrace(true);
        server.start();


        (1) Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001/idt_simulatordb", "sa", "");
        Statement st = conn.createStatement();
        String expression1 = "DROP SCHEMA IF EXISTS simulators CASCADE;\n";
        String expression2 = "CREATE SCHEMA SIMULATORS AUTHORIZATION SA;";
        String expression3 = "CREATE TABLE SIMULATORS.dirtyhack();";
        String expression4 = "DROP SCHEMA IF EXISTS myschema CASCADE;\n";
        String expression5 = "CREATE SCHEMA myschema AUTHORIZATION SA;";
        st.executeUpdate(expression1);
        st.executeUpdate(expression2);
        st.executeUpdate(expression3);
        st.executeUpdate(expression4);
        st.executeUpdate(expression5);
        st.close();
        conn.close();

        (2)server.shutdown();
    }

要检查我的服务器是否正常,我添加第(1)行。这真的很好。但我想从另一个工具连接。为此,我在(2)之前放置了断点并启动客户端runManagerSwing.bat。 客户端succsessfully找到服务器但暂停。如果我在第(1)行和第(2)行之间做了几步,有时它会被唤醒。

  1. 为什么会这样?也许我必须从另一个线程启动服务器?怎么办?
  2. 第二个问题。我想在关机后清除所有hsqldb文件(甚至.properties和.script)。有没有这样做的首选项,或者我必须手动删除它?
  3. P.S。对不起我的英文

1 个答案:

答案 0 :(得分:0)

您的程序使用server.start()从单独的线程启动服务器。这是在执行server.start()之后可以连接到它的方法。如果它是同一个线程,则标记为(1)的代码将不会执行。

如果删除末尾的server.shutdown()行并且不放置断点,则可以从DatabaseManagerSwing连接。如果要关闭服务器,请使用DatabaseManagerSwing并执行SQL语句“SHUTDOWN”。

在IDE中使用断点时,它也可能会暂停其他线程的执行。

无法自动删除数据库文件。下一个版本2.2.6将有一个静态mathod作为删除一组数据库文件的实用程序。