【问题标题】:h2 (embedded mode ) database files problemh2(嵌入式模式)数据库文件问题
【发布时间】:2011-01-27 10:10:30
【问题描述】:

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

问题:

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

  • 当尝试从 java 代码 (JDBC) 访问它们时,它会抛出“未找到表异常”。 Java 代码中的“显示表”显示了一个包含 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 Console-浏览器界面设置:

设置:通用 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 完全相同文件显示。所以问题仍然存在于 db 文件的副本中。

【问题讨论】:

    标签: java h2


    【解决方案1】:

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

    就我而言,我有两个 URL:

    • jdbc:h2:~/XXX;MVCC=FALSE;MV_STORE=FALSE
    • jdbc:h2:~/XXX

    第一种情况创建了 XXX.h2.db 文件,第二种情况创建了 XXX.mv.db,小心。

    【讨论】:

    【解决方案2】:

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

    <property name="connection.url">jdbc:h2:file:db/h2test</property>
    

    最后没有 *.db 扩展名

    【讨论】:

      【解决方案3】:

      你也可以喜欢这个

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        请务必使用完整路径:

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

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

        请参阅Connecting to a Database using JDBC 了解更多信息。

        H2 Server URL 与 -baseDir 相关,该 -baseDir 指定为 main() 的参数。

        【讨论】:

        • @Lubos:链接已失效
        猜你喜欢
        • 2012-10-22
        • 2014-10-11
        • 2021-01-07
        • 1970-01-01
        • 2017-03-05
        • 2020-06-14
        • 2016-01-22
        • 2012-08-17
        • 2016-12-26
        相关资源
        最近更新 更多