H2가 메모리 내 데이터베이스에서 스키마를 자동 생성하도록 할 수 있습니까?
(이미 H2 데이터베이스 In memory-Init schema via Spring / Hibernate 질문을 보았습니다 . 여기에서는 적용 할 수 없습니다.)
H2에 연결할 때 스키마를 자동으로 생성 할 수있는 설정이 있는지 알고 싶습니다. 도움이된다면 인 메모리 케이스에만 관심이 있습니다.
H2는 URL 끝에 세미콜론으로 구분 된 다양한 수정자를 지원하지만 스키마를 자동으로 생성하기위한 수정자를 찾지 못했습니다. 그런 기능이 있습니까?
예, H2는 연결할 때 SQL 문 실행을 지원 합니다 . 스크립트를 실행하거나 한두 개의 명령문을 실행할 수 있습니다.
String url = "jdbc:h2:mem:test;" +
"INIT=CREATE SCHEMA IF NOT EXISTS TEST"
String url = "jdbc:h2:mem:test;" +
"INIT=CREATE SCHEMA IF NOT EXISTS TEST\\;" +
"SET SCHEMA TEST";
String url = "jdbc:h2:mem;" +
"INIT=RUNSCRIPT FROM '~/create.sql'\\;" +
"RUNSCRIPT FROM '~/populate.sql'";
이중 백 슬래시 ( \\
)는 Java 내에서만 필요합니다. 전에 백 슬래시 (들) ;
이 내 INIT
필요합니다.
"기본적으로 응용 프로그램이 호출 DriverManager.getConnection(url, ...)
되고 URL에 지정된 데이터베이스가 아직 존재하지 않으면 새 (빈) 데이터베이스가 생성됩니다."— H2 데이터베이스 .
부록 : @Thomas Mueller는 연결 에서 SQL 을 실행 하는 방법을 보여 주지만, 아래에 제안 된대로 코드를 생성하고 채 웁니다.
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);
}
}
}
application.yml과 함께 spring을 사용하는 경우 다음이 작동합니다.
spring: datasource: url: jdbc:h2:mem:mydb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL;INIT=CREATE SCHEMA IF NOT EXISTS calendar
Thomas가 작성한 내용이 정확하며 여러 스키마를 초기화하려는 경우 다음을 사용할 수 있습니다. \\;
두 개의 create 문 이 분리되어 있습니다.
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();
참조 : http://www.h2database.com/html/features.html#execute_sql_on_connection
'programing' 카테고리의 다른 글
데이터베이스 테이블의 임의 레코드 (T-SQL) (0) | 2020.10.07 |
---|---|
WPF ListView : 항목에서 두 번 클릭 이벤트 첨부 (0) | 2020.10.07 |
git status에서 "치명적 : git 저장소 (또는 상위 디렉토리)가 아님" (0) | 2020.10.07 |
Dockerfile if else 조건 외부 인수 포함 (0) | 2020.10.07 |
명령 또는 로컬 vimrc 파일을 사용하여 여러 vim 구성간에 전환하는 방법은 무엇입니까? (0) | 2020.10.07 |