запустить hsqldb из кода приостановить клиентов - PullRequest
0 голосов
/ 21 октября 2011

Хорошо, мне нужно создать 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. Клиент успешно находит сервер, но приостанавливается. Иногда просыпается, если я делаю несколько шагов между строкой (1) и (2).

  1. Почему это происходит? Может быть, я должен запустить сервер из другого потока? Как это сделать?
  2. И второй вопрос. Я хочу очистить все файлы hsqldb после выключения (даже .properties и .script). Есть ли какие-либо предпочтения для этого, или я должен удалить его вручную?

p.s. извините за мой английский

1 Ответ

0 голосов
/ 21 октября 2011

Ваша программа использует server.start (), который запускает сервер из отдельного потока. Вот как вы можете подключиться к нему после выполнения server.start (). Если бы это был тот же поток, код, который вы пометили (1), не был бы выполнен.

Если вы удаляете строку server.shutdown () в конце и не ставите точку останова, вы можете подключиться из DatabaseManagerSwing. Если вы хотите завершить работу сервера, используйте DatabaseManagerSwing и выполните инструкцию SQL «SHUTDOWN».

Когда вы используете точку останова в IDE, она может также приостановить выполнение других потоков.

Невозможно автоматически удалить файлы базы данных. В следующей версии 2.2.6 в качестве утилиты для удаления набора файлов базы данных будет использоваться статический метод.

...