以编程方式启动 hsqldb 数据库
Posted
技术标签:
【中文标题】以编程方式启动 hsqldb 数据库【英文标题】:Starting hsqldb database programmatically 【发布时间】:2012-04-25 21:05:57 【问题描述】:我想以编程方式启动 HSQLdb 服务器。 我创建了一个如下所示的可运行对象,然后在线程中启动它。
Runnable hsqlRunnable = new Runnable()
public void run()
HsqlProperties props = new HsqlProperties();
props.setProperty("server.database.0", "file:C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\logs\ApplicationLog\mydb;shutdown=true;");
props.setProperty("server.dbname.0", "xdb");
org.hsqldb.Server server = new org.hsqldb.Server();
try
server.setProperties(props);
catch (Exception e)
return;
server.start();
我得到错误: [Thread[HSQLDB Server @4db602,6,main]]:因为没有打开的数据库而关闭
谁能帮忙指出我哪里出错了。
感谢您的帮助 巴拉
【问题讨论】:
想通了。现在工作。对于那些感兴趣的人 server.setTrace(true);提供故障排除所需的信息。 【参考方案1】:您可以使用单独的类来管理您的 HSQLdb 服务器实例:
public class DBManager
final String dbLocation = "c:\\temp\\"; // change it to your db location
org.hsqldb.server.Server sonicServer;
Connection dbConn = null;
public void startDBServer()
HsqlProperties props = new HsqlProperties();
props.setProperty("server.database.0", "file:" + dbLocation + "mydb;");
props.setProperty("server.dbname.0", "xdb");
sonicServer = new org.hsqldb.Server();
try
sonicServer.setProperties(props);
catch (Exception e)
return;
sonicServer.start();
public void stopDBServer()
sonicServer.shutdown();
public Connection getDBConn()
try
Class.forName("org.hsqldb.jdbcDriver");
dbConn = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost/xdb", "SA", "");
catch (Exception e)
e.printStackTrace();
return dbConn;
并使用这个类:
public class WFProcess extends Thread
DBManager dbm = new DBManager();
public static void main(String[] args)
(new WFProcess()).start();
public void run()
dbm.startDBServer();
// some usefull server work here
Connection conn = dbm.getDBConn();
try
Statement stmt = conn.createStatement();
stmt.executeQuery("CREATE TABLE IF NOT EXISTS answers (num INT IDENTITY, answer VARCHAR(250))");
stmt.executeQuery("INSERT INTO answers (answer) values ('this is a new answer')");
ResultSet rs = stmt.executeQuery("SELECT num, answer FROM answers");
while (rs.next())
System.out.println("Answer number: " + rs.getString("num")
+ "; answer text: " + rs.getString("answer"));
catch (Exception e)
e.printStackTrace();
// end of usefull server work
dbm.stopDBServer();
【讨论】:
【参考方案2】:正如您所说, server.setTrace(true) 有助于排除故障。 server.setSilent(false) 也是如此。
但是您不应该创建并启动 Runnable 来启动服务器。 Server 类完成所有这些工作并启动必要的线程。
【讨论】:
是的,弗雷德。如果我通过 main 调用服务器,它会创建和管理线程。但是我的要求是在所有客户端断开连接时关闭服务器。因此,我选择通过线程启动 hsqldb 服务器,这样当父进程关闭时,hsqldb 服务器也将关闭。不幸的是,使用 shutdown=true 启动服务器不起作用。这足以满足我的目的。【参考方案3】:对于 HSQL 2.3.x,请参阅下文以将 HSQL 作为 WebServer 运行(使用端口 80 进行网络的 HSQL 服务器。)
https://***.com/a/37784679/15789
【讨论】:
以上是关于以编程方式启动 hsqldb 数据库的主要内容,如果未能解决你的问题,请参考以下文章