You can use a separate class to manage the HSQLdb server instance:
public class DBManager {
final String dbLocation = "c:\\temp\\";
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();
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();
}
dbm.stopDBServer();
}
}