Проблема HSQLDB: запуск базы данных HSQL из кода Java - PullRequest
1 голос
/ 07 марта 2012

когда мне нужно запустить HSQLDB для моего приложения, я должен сделать это из командной строки, поэтому я всегда дважды щелкаю Server.bat (командный файл), чтобы запустить сервер, который содержит:

java -classpath ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.Server -database test

или введите команду запуска сервера из командной строки.

Но мой вопрос заключается в том, можно ли запустить сервер базы данных HSQL путем кодирования непосредственно в моем коде Java, нет необходимости запускать его отдельно от приложения Java?какой будет код?

Обратите внимание, что я использую пружину 2.5, пружину seecurity 2.0.4 (отключение аннотации).

Спасибо.

Ответы [ 2 ]

1 голос
/ 07 марта 2012
0 голосов
/ 13 июня 2016

Пример кода для программного запуска и остановки HSQL WebServer. Импорт удален для краткости.

Проще говоря, этот код не является потокобезопасным. Это просто пример кода.

Также обратите внимание, что база данных в памяти будет запускаться автоматически при получении первого запроса jdbc. Кроме того, отключите базу данных в памяти, выполнив команду SQL SHUTDOWN через jdbc.

Использует org.hsqldb.server.WebServer (т.е. сервер hsql db использует http-порт 80), но вместо этого вы можете использовать org.hsqldb.server.Server. Вы можете вызвать setPort на любом из них, чтобы переопределить порт по умолчанию.

public class HsqlServer {

    /**
     * Start the hsql server locally, with an HTTP interface. Rightclick on this
     * class in Eclipse, and run.
     * 
     * @param args
     */

    private static WebServer ws;

    public static void main(String args[]) {
        new HsqlServer().startDB();
    }

    public void stopDB() {
        if (ws != null) {
            try {
                ws.checkRunning(true);
                System.out.println("db is running. stopping now");
                stopServer2();
            }
            catch(HsqlException hsqle) {
                System.out.println("db is already stopped");
            }
        }
        else {
            System.out.println("DB not started. it is null");
        }
    }

    private void stopServer2() {
        ws.shutdownWithCatalogs(Database.CLOSEMODE_NORMAL);
    }

    public void startDB() {
        // String[] argsToServer = { "--database.0",
        // "file:" + HsqlServerConst.dbFileName, "-dbname.0",
        // HsqlServerConst.dbName };
        // WebServer.main(argsToServer);

        if (ws != null) {
            try {
                ws.checkRunning(false);
                System.out.println("check running is false");
                startServer2();
            } catch (HsqlException hsqle) {
                // already running.
                System.out.println("Server is already running.");
                return;
            }
        } else {
            // start the server, it is null
            System.out.println("server is null, starting now");
            startServer2();
        }
    }

    private WebServer startServer2() {
        ws = new WebServer();
        ws.setDatabasePath(0, "file:" + HsqlServerConst.dbFileName);
        ws.setDatabaseName(0, HsqlServerConst.dbName);
        ws.start();
        return ws;
    }

}
...