h2(嵌入模式)数据库文件问题

我的src目录(Java,Eclipse)中有一个h2-database文件:h2test.db

问题:

  • 从命令行启动h2.jar(以及端口8082上的h2浏览器界面),我在h2test.db中创建了2个表’test1’和’test2’,我在其中放了一些数据;

  • 当试图从java代码(JDBC)访问它们时,它会抛出“table not found exception”。 java代码中的“show tables”显示了一个0行的结果集。

  • 另外,当从java代码(CREATE TABLE …等)创建一个新表(’newtest’)时,我在以后启动h2.jar浏览器界面时看不到它; 只显示了其他两个表(’test1’和’test2’)(但随后可以从java代码中访问新创建的表’newtest’)。

我对嵌入式数据库缺乏经验; 我相信我在这里做了一些根本错误的事情。 我的假设是,我正在访问同一个文件 – 一次来自java应用程序,一次来自h2控制台 – 浏览器界面。 我似乎无法理解,我在这里做错了什么?

编辑:根据要求,添加一些代码:

Java代码:

Class.forName("org.h2.Driver"); String url = "jdbc:h2:" + "db/h2test.db"; String user = "aeter"; String password = "aeter"; Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement ps2 = conn.prepareStatement("Show tables;"); ResultSet rs = ps2.executeQuery(); 

此结果集有0行(没有表),而不是向我显示2个表。

H2控制台 – 浏览器界面设置:

 设置:通用h2(嵌入式)
驱动程序类:org.h2.Driver
 JDBC URL:jdbc:h2:../../ workspace / project_name / src / db / h2test.db
用户名:aeter
密码:aeter 

EDIT2:我将数据库复制到一个新文件夹。 现在,新文件夹中的db文件显示为’newtest’表(来自java代码)和’test1’和’test2’表(来自控制台 – 浏览器h2接口) – 与旧数据库完全相同文件显示。 因此,db文件的副本仍然存在问题。

对于嵌入式模式,您需要检查路径。 例如,使用相对于主目录的路径:

 "jdbc:h2:file:~/db/h2test.db" 

当然,请使用完整路径:

 "jdbc:h2:file:/users/aeter/db/h2test.db" 

为方便起见,附加;IFEXISTS=TRUE以避免创建虚假的数据库文件。

有关更多信息,请参阅使用JDBC连接到数据库

H2 服务器 URL相对于指定为main()参数的-baseDir

如果在JDBC url中使用某些特殊参数,则可能会出现问题,数据库文件名可能因各种情况而异。

就我而言,我有两个url:

  • JDBC:H 2:〜/ XXX; MVCC = FALSE; MV_STORE = FALSE
  • JDBC:H2:〜/ XXX

第一种情况创建了XXX.h2.db文件,第二种情况是XXX.mv.db,请注意。

你也可以这样

 "jdbc:h2:file:db/h2test.db" 

然后java从项目文件夹中查找db文件夹

 ->projectName // project folder -->src // src folder -->db // here your database folder -->.... 

如果您正在使用Hibernate,请在hibernate.cfg.xml文件中尝试:

 jdbc:h2:file:db/h2test 

最后没有* .db扩展名