HSQLDB问题:从Java代码启动HSQL数据库

时间:2012-03-07 13:01:14

标签: batch-file hsqldb

当我必须为我的应用程序运行HSQLDB时,我必须从命令提示符处执行此操作,因此我总是双击Server.bat(批处理文件)以启动包含以下内容的服务器:

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

或从命令提示符处键入start server命令。

但是,我的问题是,我可以通过直接在我的java代码中编码来启动HSQL数据库服务器,而不需要从java应用程序中单独启动它吗?什么是代码?

请注意,我使用的是spring 2.5,spring seecurity 2.0.4(注释禁用)。

谢谢。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

以编程方式启动和停止HSQL WebServer的示例代码。为简洁起见,删除了导入。

保持简单,此代码不是线程安全的。这只是示例代码。

另请注意,内存db将在收到第一个jdbc请求时自动启动。另外,通过jdbc执行SQL命令SHUTDOWN来关闭内存db。

使用org.hsqldb.server.WebServer(即hsql数据库服务器使用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;
    }

}