H2嵌入式数据库丢失部署的表/数据

时间:2013-09-20 19:59:00

标签: java database deployment h2

所以我有一个应用程序,它使用了一个数据库,现在我需要在应用程序中使用一个嵌入式数据库,这样你所做的就是安装程序,数据库已经存在(所以客户端没有必须安装mysql服务器,wamp,xampp等的副本来运行mysql数据库)及其所有信息。

我已经将应用程序导出到一个jar文件中,然后将其制作成一个完美的exe文件,并在我的电脑上运行,但是当我将它复制到另一台PC并运行它时,数据库就在那里,但是表格数据和我放入的表格都没了。我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:0)

有多种选择。一种选择是:

  • 使用SQL语句SCRIPT TO '~/script.sql'
  • 从当前数据库创建SQL脚本文件
  • 将文件script.sql从用户主目录复制到应用程序的源目录,以便将其捆绑为资源。使用应用程序源代码的根目录(因为这是最简单的解决方案)。
  • 在目标计算机中,使用数据库URL jdbc:h2:~/data;INIT=runscript from 'classpath:script.sql'。这将打开数据库并运行脚本。它会将脚本作为资源读取。

还有其他选项,但它们需要您read the documentation of the H2 database

答案 1 :(得分:0)

看一个类似的问题(使用导出的数据库进入H2),我发现上面的答案很有用,但没有设法让SCRIPT工作。 我的数据库是mySQL。 将数据库导出为适合我的脚本的方法来自linux shell:

mysqldump -u[user] [databasename] > exportscriptfile.sql

然后我对脚本进行了一些抛光工作,以便H2可以读取它(参见this SO thread上的类似内容)

这是我使用jdbc EmbeddedDatabaseBuilder工作的基于java的弹簧配置。在这里创建为bean的数据源可以在任何jdbc调用中使用:

@Configuration
public class H2DBConfig  {

@Bean
public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder()
        .setType(EmbeddedDatabaseType.H2)
        .addScript("classpath:exportscriptfile.sql")
        .build();
}