Java 如何从文件(populate.sql)在内存数据库中填充H2?

Java 如何从文件(populate.sql)在内存数据库中填充H2?,java,spring,hibernate,h2,Java,Spring,Hibernate,H2,我想将H2内存数据库添加到我的Spring MVC应用程序中。对于ORM,我使用Hibernate。这是我的配置: [hibernate.cfg.xml] <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibe

我想将H2内存数据库添加到我的Spring MVC应用程序中。对于ORM,我使用Hibernate。这是我的配置:

[hibernate.cfg.xml]

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.h2.Driver</property>
        <property name="hibernate.connection.url">jdbc:h2:~/myDB</property>
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password">qwerty</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <mapping class="de.alf.h2.entity.Student"/>
    </session-factory>
</hibernate-configuration>

如何在我的代码中做到这一点?

您可以使用JDBC名称空间
xmlns:JDBC=”http://www.springframework.org/schema/jdbc“
然后您可以将嵌入式数据库添加为

<jdbc:embedded-database id="dataSource">
    <jdbc:script location="classpath:db/schema.sql"/>
    <jdbc:script location="classpath:db/test-data.sql"/>
</jdbc:embedded-database>


然后在JDBCTemplate或JPA中与hibernate一起使用此数据源,您可以使用JDBC名称空间
xmlns:JDBC=”http://www.springframework.org/schema/jdbc“
然后您可以将嵌入式数据库添加为

<jdbc:embedded-database id="dataSource">
    <jdbc:script location="classpath:db/schema.sql"/>
    <jdbc:script location="classpath:db/test-data.sql"/>
</jdbc:embedded-database>


然后在JDBCTemplate中使用此数据源,或者在JPA中与hibernate一起使用此数据源,如果
hbm2ddl.auto
设置为
create
hibernate
将在
SessionFactory
创建期间从映射类生成DDL。您还可以将名为
import.sql
的文件添加到类路径以导入一些数据

如果您使用M2进行测试,并且希望自己进行测试,还可以使用
H2
功能:

jdbc:h2:~/myDB;INIT=runscript from '~/resource/db/data.sql'

**请注意,
data.sql
的路径可能不同。

如果
hbm2ddl.auto
设置为
create
Hibernate
将在
会话工厂创建期间从映射类生成DDL。您还可以将名为
import.sql
的文件添加到类路径以导入一些数据

如果您使用M2进行测试,并且希望自己进行测试,还可以使用
H2
功能:

jdbc:h2:~/myDB;INIT=runscript from '~/resource/db/data.sql'

**请注意,
data.sql
的路径可能不同。

您需要填充db还是创建db?我需要填充db。您需要填充db还是创建db?我需要填充db。我现在遇到一个异常,
数据库可能已经在使用:“被另一个进程锁定”。可能的解决方案:关闭所有其他连接;使用服务器模式[90020-176]
似乎数据库已经在运行或其他什么。试着终止进程,我终止了它。现在好了。但是我应该在哪里添加
jdbc:h2:~/myDB;INIT=runscript来自“~/resource/db/data.sql”
?要
hibernate.cfg.xml
?jdbc:h2:~/myDB;INIT=runscript from'~/resource/db/data.sql'请看,我现在收到一个异常
数据库可能已经在使用中:“被另一个进程锁定”。可能的解决方案:关闭所有其他连接;使用服务器模式[90020-176]
似乎数据库已经在运行或其他什么。试着终止进程,我终止了它。现在好了。但是我应该在哪里添加
jdbc:h2:~/myDB;INIT=runscript来自“~/resource/db/data.sql”
?要
hibernate.cfg.xml
?jdbc:h2:~/myDB;INIT=runscript来自“~/resource/db/data.sql”请参阅
jdbc:h2:~/myDB;INIT=runscript from '~/resource/db/data.sql'