Java H2 数据库应用

Java Application with H2 Database

我有一个 java 应用程序可以从 H2 数据库中检索数据。 数据库和应用程序安装在同一台计算机上。 现在,当我 运行 我的 Windows 10 pc 下的应用程序一切正常,但是当我将 java 应用程序复制到我的 Raspberry Pi 2 B(Raspbian Jessie ) 它不起作用了。 在这两个系统上,我都安装了可以通过浏览器界面访问的 H2 数据库,以及 java.

Raspberry Pi 上的错误是:

Feb 26, 2016 2:39:26 AM HelperPackage.DatabaseConnection startConnection
SEVERE: null
org.h2.jdbc.JdbcSQLException: Table "PRODUKTE" not found; SQL statement:
SELECT Name, Datum, Anzahl, Warnzeitpunkt, ID
FROM PRODUKTE
ORDER BY Datum;

您可以看到整个错误消息 here

看起来我的 table 在我的 Raspberry Pi 上不存在,但是当我查看我的 H2 数据库的浏览器界面时,table 在那里。

我的连接是使用您在 .getConnection 方法中看到的字符串创建的(从 java.sql.DriverManager 导入)。

DriverManager.getConnection("jdbc:h2:~/test","sa","");

正如我所说,该应用程序在我的 Windows 10 台电脑上运行良好。

我使用的库:

我没有使用像 ~/test 这样的动态路径,而是使用像 /home/pi 这样的固定路径来解决问题。

软代码显式路径

tilde (~) 的扩展并不完全标准。

有趣……我第一次看到that example in the H2 doc的时候还关心这个。我依稀记得遇到过其他情况,波浪号作为“我家 directory/folder”的符号失败了,与 H2 或 JDBC.

无关

对于我自己的工作,出于我模糊的偏执,我一直在使用这个软编码调用而不是我的 H2 中的波浪号 JDBC URL:

System.getProperty( "user.home" )

像这样。

String jdbcUrl = "jdbc:h2:" + System.getProperty( "user.home" ) + "/test" , "scott" , "tiger" );

参见Oracle Tutorial for more info on System and Properties


当我看到 localhost 由于底层库之间的某些相互作用而无法解决的情况时,这个问题让我想起了一个类似的问题,迫使显式使用 127.0.0.1

如果您有时间,深入了解 H2 源代码以发现波浪符号扩展在 Pi 上失败的确切位置可能会很有趣。关于 Pi 的 Java 实现?或者 Pi 的 Linux 中的库被 Java 调用?