我的src目录中有一个h2数据库文件(Java,Eclipse):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控制台 - 浏览器界面设置:
Settings: Generic h2(embedded) driver class: org.h2.Driver JDBC URL: jdbc:h2:../../workspace/project_name/src/db/h2test.db user name: aeter password: aeter
EDIT2:我将数据库复制到新文件夹。现在,新文件夹中的db文件显示为'newtest'表(来自java代码)和'test1'和'test2'表(来自控制台 - 浏览器h2接口) - 与旧数据库完全相同文件显示。因此,db文件的副本仍然存在问题。
答案 0 :(得分:15)
对于嵌入模式,您需要检查路径。例如,使用相对于主目录的路径:
"jdbc:h2:file:~/db/h2test.db"
可以肯定的是,使用完整路径:
"jdbc:h2:file:/users/aeter/db/h2test.db"
为方便起见,请附加;IFEXISTS=TRUE
以避免创建虚假的数据库文件。
有关详情,请参阅Connecting to a Database using JDBC。
H2 Server网址与指定为-baseDir
的参数的main()
相对。
答案 1 :(得分:1)
你也可以喜欢这个
"jdbc:h2:file:db/h2test.db"
然后java从项目文件夹
查找db文件夹->projectName // project folder
-->src // src folder
-->db // here your database folder
-->....
答案 2 :(得分:1)
如果您正在使用Hibernate,请在hibernate.cfg.xml文件中尝试:
<property name="connection.url">jdbc:h2:file:db/h2test</property>
最后没有* .db扩展名