以编程方式启动 H2 数据库
Start H2 database programmatically
我正在 Java 编写一个服务器-客户端应用程序,我需要在服务器端实现一个本地数据库,因此我决定使用 H2 数据库引擎。
还有一件事要补充,我使用 TCP 连接来启动 运行 数据库。
这是我到目前为止整理的内容:
Class.forName("org.h2.Driver");
Server server = Server.createTcpServer(DB_PATH).start();
Connection currentConn = DriverManager.getConnection(DB_PATH, DB_USER, DB_PASSWORD);
其中连接字符串是jdbc:h2:tcp://localhost/~/test
。
那段代码returns有一个例外:
Feature not supported: "jdbc:h2:tcp://localhost/~/test" [50100-176]
我关注了this article。
像这样的东西应该可以工作
Server server = null;
try {
server = Server.createTcpServer("-tcpAllowOthers").start();
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection("jdbc:h2:tcp://localhost/~/Whosebug", "sa", "");
System.out.println("Connection Established: "
+ conn.getMetaData().getDatabaseProductName() + "/" + conn.getCatalog());
} catch (Exception e) {
e.printStackTrace();
}
并且输出是连接已建立:H2/Whosebug
这已通过 h2-1.4.184
测试
这是我的简单 H2-DBManager - 只需将其文件名命名为 DBManager.java 并随时重用它:
import java.sql.SQLException;
import org.h2.tools.Server;
public class DBManager {
private static void startDB() throws SQLException {
Server.createTcpServer("-tcpPort", "9092", "-tcpAllowOthers").start();
}
private static void stopDB() throws SQLException {
Server.shutdownTcpServer("tcp://localhost:9092", "", true, true);
}
public static void main(String[] args) {
try {
Class.forName("org.h2.Driver");
if (args.length > 0) {
if (args[0].trim().equalsIgnoreCase("start")) {
startDB();
}
if (args[0].trim().equalsIgnoreCase("stop")) {
stopDB();
}
} else {
System.err
.println("Please provide one of following arguments: \n\t\tstart\n\t\tstop");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接受默认值后我可以更轻松地做到这一点:
Server server = Server.createTcpServer().start();
我正在 Java 编写一个服务器-客户端应用程序,我需要在服务器端实现一个本地数据库,因此我决定使用 H2 数据库引擎。
还有一件事要补充,我使用 TCP 连接来启动 运行 数据库。 这是我到目前为止整理的内容:
Class.forName("org.h2.Driver");
Server server = Server.createTcpServer(DB_PATH).start();
Connection currentConn = DriverManager.getConnection(DB_PATH, DB_USER, DB_PASSWORD);
其中连接字符串是jdbc:h2:tcp://localhost/~/test
。
那段代码returns有一个例外:
Feature not supported: "jdbc:h2:tcp://localhost/~/test" [50100-176]
我关注了this article。
像这样的东西应该可以工作
Server server = null;
try {
server = Server.createTcpServer("-tcpAllowOthers").start();
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection("jdbc:h2:tcp://localhost/~/Whosebug", "sa", "");
System.out.println("Connection Established: "
+ conn.getMetaData().getDatabaseProductName() + "/" + conn.getCatalog());
} catch (Exception e) {
e.printStackTrace();
}
并且输出是连接已建立:H2/Whosebug
这已通过 h2-1.4.184
测试这是我的简单 H2-DBManager - 只需将其文件名命名为 DBManager.java 并随时重用它:
import java.sql.SQLException;
import org.h2.tools.Server;
public class DBManager {
private static void startDB() throws SQLException {
Server.createTcpServer("-tcpPort", "9092", "-tcpAllowOthers").start();
}
private static void stopDB() throws SQLException {
Server.shutdownTcpServer("tcp://localhost:9092", "", true, true);
}
public static void main(String[] args) {
try {
Class.forName("org.h2.Driver");
if (args.length > 0) {
if (args[0].trim().equalsIgnoreCase("start")) {
startDB();
}
if (args[0].trim().equalsIgnoreCase("stop")) {
stopDB();
}
} else {
System.err
.println("Please provide one of following arguments: \n\t\tstart\n\t\tstop");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接受默认值后我可以更轻松地做到这一点:
Server server = Server.createTcpServer().start();