[SQL] 나는 H2는 메모리 데이터베이스의 스키마를 자동 작성 할 수 있습니까?
SQL나는 H2는 메모리 데이터베이스의 스키마를 자동 작성 할 수 있습니까?
(난 이미 메모리에서 H2 데이터베이스를 본 적이 - 봄 / 최대 절전 모드 질문을 통해 초기화 스키마를, 그것은 여기에 적용되지 않습니다.)
나는에 연결시 스키마를 자동 생성 날 수 있습니다 H2의 설정이 있는지 알고 싶습니다. 도움이된다면, 나는 메모리의 경우에만 관심이 있어요.
H2는 URL의 끝에 다양한 세미콜론으로 구분 된 수정을 지원하지만 자동으로 스키마를 만들기위한 하나를 찾을 수 없습니다. 이러한 기능이 있습니까?
해결법
-
==============================
1.연결할 때 예, H2 지원은 SQL 문을 실행. 당신은 스크립트, 아니면 그냥 문 또는 두 가지를 실행할 수 있습니다 :
연결할 때 예, 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'";
단지 자바 내에서 요구되는 이중 백 슬래시 (\\) 유의하시기 바랍니다. 백 슬래시 (ES) 전에; 초기화 내에서 필요합니다.
-
==============================
2.당신이 application.yml 봄을 사용하는 경우 다음이 당신을 위해 작동합니다
당신이 application.yml 봄을 사용하는 경우 다음이 당신을 위해 작동합니다
봄: 데이터 소스 : URL : JDBC : H2 : MEM : 여기서 mydb; DB_CLOSE_ON_EXIT = FALSE; MODE = PostgreSQL을, INIT = CREATE SCHEMA IF는 NOT 일정 존재
-
==============================
3.당신은 다음을 사용할 수있는 여러 스키마를 초기화 할 경우 어떻게 토마스가 작성한 것은, 그뿐만 아니라, 올바른 것입니다. 주의점 \\이있다; 분리 두 사람은 문을 만들 수 있습니다.
당신은 다음을 사용할 수있는 여러 스키마를 초기화 할 경우 어떻게 토마스가 작성한 것은, 그뿐만 아니라, 올바른 것입니다. 주의점 \\이있다; 분리 두 사람은 문을 만들 수 있습니다.
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
-
==============================
4."응용 프로그램이 DriverManager.getConnection를 호출 기본 (URL, ...) 아직 존재하지 않는 URL에 지정된 데이터베이스으로 새로운 (빈) 데이터베이스가 생성됩니다."- H2 데이터베이스.
"응용 프로그램이 DriverManager.getConnection를 호출 기본 (URL, ...) 아직 존재하지 않는 URL에 지정된 데이터베이스으로 새로운 (빈) 데이터베이스가 생성됩니다."- H2 데이터베이스.
부록 : @Thomas 뮬러 쇼는 어떻게 연결에 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); } } }
-
==============================
5.표기 : 당신이 application.yml와 스프링 프레임 워크를 사용하고 문제가 발생하면 테스트가 INIT 속성에있는 SQL 파일을 찾을 수 있도록하는 경우에, 당신은 클래스 패스를 사용할 수 있습니다.
표기 : 당신이 application.yml와 스프링 프레임 워크를 사용하고 문제가 발생하면 테스트가 INIT 속성에있는 SQL 파일을 찾을 수 있도록하는 경우에, 당신은 클래스 패스를 사용할 수 있습니다.
당신은 SRC / 테스트 / 자원에 init.sql SQL 파일이있는 경우 예를 들어, 단지 사용
url=jdbc:h2:~/test;INIT=RUNSCRIPT FROM 'classpath:init.sql';DB_CLOSE_DELAY=-1;
from https://stackoverflow.com/questions/5225700/can-i-have-h2-autocreate-a-schema-in-an-in-memory-database by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 쉼표의 차이 조인 분리와 MySQL의 구문에 가입 무엇입니까? [복제] (0) | 2020.05.19 |
---|---|
[SQL] 어떻게 내 테이블을 잠금되고 있는지 확인하려면? (0) | 2020.05.19 |
[SQL] SQL의 목적이 "있는 그대로"를 키워드 무엇입니까? (0) | 2020.05.19 |
[SQL] IN 대 큰 행 집합에 가입하세요 (0) | 2020.05.19 |
[SQL] 와 'ROW_NUMBER'키워드 오라클에 의해 분할 ' (0) | 2020.05.19 |