(Saya telah melihat database H2 Dalam memori - Skema Init melalui pertanyaan Spring / Hibernate ; ini tidak berlaku di sini.)
Saya ingin tahu apakah ada pengaturan di H2 yang memungkinkan saya membuat skema secara otomatis saat menyambungkannya. Jika itu membantu, saya hanya tertarik pada kasus dalam memori.
H2 mendukung berbagai pengubah yang dipisahkan titik koma di akhir URL, tetapi saya tidak menemukannya untuk membuat skema secara otomatis. Apakah ada fitur seperti itu?
<property name="hibernate.connection.url">jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'script1.sql'\\\;RUNSCRIPT FROM script2.sql'</property>
di konfigurasi hibernasi Anda.;
tidak perlu di-escape (ada yang tidak di-escape;
sebelumINIT
). Bisakah Anda mencoba jika hanya menggunakan satu garis miring terbalik yang berfungsi?'script1.sql'\;RUNSCRIPT...
Jika Anda menggunakan spring dengan application.yml, berikut ini akan bekerja untuk Anda
spring: datasource: url: jdbc:h2:mem:mydb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL;INIT=CREATE SCHEMA IF NOT EXISTS calendar
sumber
Apa yang Thomas telah tulis benar, selain itu, jika Anda ingin menginisialisasi beberapa skema, Anda dapat menggunakan yang berikut ini. Perhatikan ada yang
\\;
memisahkan dua pernyataan buat.EmbeddedDatabase db = new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .setName("testDb;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=create " + "schema if not exists " + "schema_a\\;create schema if not exists schema_b;" + "DB_CLOSE_DELAY=-1;") .addScript("sql/provPlan/createTable.sql") .addScript("sql/provPlan/insertData.sql") .addScript("sql/provPlan/insertSpecRel.sql") .build();
ref: http://www.h2database.com/html/features.html#execute_sql_on_connection
sumber
"Secara default, saat aplikasi memanggil
DriverManager.getConnection(url, ...)
dan database yang ditentukan dalam URL belum ada, database baru (kosong) dibuat." - Database H2 .Tambahan: @Thomas Mueller menunjukkan cara Menjalankan SQL pada Koneksi , tetapi terkadang saya hanya membuat dan mengisi kode, seperti yang disarankan di bawah ini.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /** @see http://stackoverflow.com/questions/5225700 */ public class H2MemTest { public static void main(String[] args) throws Exception { Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", ""); Statement st = conn.createStatement(); st.execute("create table customer(id integer, name varchar(10))"); st.execute("insert into customer values (1, 'Thomas')"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select name from customer"); while (rset.next()) { String name = rset.getString(1); System.out.println(name); } } }
sumber
Jika Anda menggunakan Spring Framework dengan
application.yml
dan mengalami kesulitan untuk membuat pengujian menemukan file SQL padaINIT
properti, Anda dapat menggunakanclasspath:
notasi.Misalnya, jika Anda memiliki
init.sql
file SQL disrc/test/resources
, gunakan saja :url=jdbc:h2:~/test;INIT=RUNSCRIPT FROM 'classpath:init.sql';DB_CLOSE_DELAY=-1;
sumber