如何在服务器模式下运行H2数据库?

时间:2012-02-16 19:53:30

标签: java database h2

如何在服务器模式下启动H2数据库。我需要从我的应用程序启动它。我尝试了以下代码:

server = Server.createTcpServer().start();

以下是连接的属性:

javabase.jdbc.url = jdbc:h2:tcp://localhost:9092/nio:~/source/db/database/db;AUTO_SERVER=TRUE
javabase.jdbc.driver = org.h2.Driver
javabase.jdbc.username = sa
javabase.jdbc.password =

当我运行程序时,我收到以下错误:

client.db.exception.DAOException: org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-164]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:439)
    at org.h2.store.FileLock.lockFile(FileLock.java:336)
    at org.h2.store.FileLock.lock(FileLock.java:128)
    at org.h2.engine.Database.open(Database.java:542)
    at org.h2.engine.Database.openDatabase(Database.java:222)
    at org.h2.engine.Database.<init>(Database.java:217)
    at org.h2.engine.Engine.openSession(Engine.java:56)
    at org.h2.engine.Engine.openSession(Engine.java:159)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
    at org.h2.engine.Engine.createSession(Engine.java:121)
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:133)
    at java.lang.Thread.run(Thread.java:680)

谢谢,

6 个答案:

答案 0 :(得分:26)

正如异常消息所说,“数据库可能已在使用中”。您需要关闭所有其他连接,以确保数据库不会同时在另一个进程中打开。

顺便说一下,不要同时使用AUTO_SERVER = TRUE 服务器模式。请参阅automatic mixed mode的文档。使用任何一个。

我猜你对不同的连接模式有点困惑。我建议您阅读the documentation about the connection modes,以确保您理解它。

答案 1 :(得分:17)

从命令行

java -jar h2-1.3.160.jar -webAllowOthers -tcpAllowOthers

这将以服务器模式启动h2数据库:

  

http://A.B.C.D:8082运行的Web控制台服务器(其他人可以连接)   无法启动浏览器以打开网址http://A.B.C.D:8082:浏览器   检测失败,系统属性h2.browser未设置TCP服务器   运行于tcp://A.B.C.D:9092(其他人可以连接)运行的PG服务器   pg://A.B.C.D:5435(仅限本地连接)

打开浏览器以拥有管理GUI

答案 2 :(得分:12)

您可以使用以下代码在服务器模式下运行H2。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:target/h2/ps;AUTO_SERVER=TRUE" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>

您可以使用SQuirrel SQL客户端(http://squirrel-sql.sourceforge.net/)连接到H2数据库并查看表格。

  1. 建立新连接。
  2. 在驱动程序下拉菜单中选择H2
  3. 将url设置为项目目标文件夹h2文件夹(jdbc:h2:C:\ projects \ workspace \ TestProject \ target / h2 / ps; AUTO_SERVER = true)
  4. 输入用户名(“sa”)
  5. 输入密码(“”)

答案 3 :(得分:2)

关闭所有使用H2的应用程序(Web控制台等) 然后将AUTO_SERVER = TRUE添加到h2控制台中的位置末尾以及java程序(已经完成)中

答案 4 :(得分:0)

尝试启动H2时出现此错误。
另请参见http://h2database.com/javadoc/org/h2/tools/Server.html

  

线程“主” org.h2.jdbc.JdbcSQLException中的异常:功能未启用   支持:“-〜webAllowOthers” [50100-197]

所以我按照以下步骤操作:

  1. make dir mkdir h2db此目录将包含您的数据库文件。
  2. 命中此命令:CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS 'SA' AS SELECT user_name(); -- Shows execution context is set to SA. EXECUTE AS CALLER; SELECT user_name(); -- Shows execution context is set to the caller of the module. REVERT; SELECT user_name(); -- Shows execution context is set to SA. GO
    该命令将启动h2
  3. 如果要在后端运行h2,请打开vi h2.sh并将此命令粘贴到以下位置: java -cp bin/h2-1.4.197.jar org.h2.tools.Server -web -webAllowOthers -tcp -tcpAllowOthers -baseDir /home/manoj/dev/h2/h2db_6.0
  4. 现在运行./bin.h2.sh。

答案 5 :(得分:0)

还有一种方法。你可以定义@Configuration bean,fg.: ' @配置 公共类 H2Configuration {

@Bean
public void startTCPServer(){
    try {
        Server h2Server = Server.createTcpServer().start();
        if (h2Server.isRunning(true)) {
            System.out.println(h2Server.getStatus());
        } else {
            throw new RuntimeException("Could not start H2 server.");
        }
    } catch (SQLException e) {
        throw new RuntimeException("Failed to start H2 server: ", e);
    }
}

} '