【问题标题】:HSQLDB issue: Starting the HSQL database from Java CodeHSQLDB 问题:从 Java 代码启动 HSQL 数据库
【发布时间】:2012-03-25 00:17:18
【问题描述】:

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

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

或从命令提示符键入启动服务器命令。

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

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

谢谢。

【问题讨论】:

    标签: batch-file hsqldb


    【解决方案1】:

    【讨论】:

    • 链接应该是固定的,或者最好是在此处发布的答案。
    • 修复了与另一篇相同内容的文章的链接。
    【解决方案2】:

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

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

    还要注意,内存中的 db 在收到第一个 jdbc 请求时会自动启动。此外,通过 jdbc 执行 SQL 命令 SHUTDOWN 来关闭内存数据库。

    使用 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      相关资源
      最近更新 更多