H2 데이터베이스 생성 및 접속 시 에러

2021-03-08

H2 데이터베이스에서 생성 및 접속 시 오류에 대해 정리를 한 내용 입니다.


H2란?

H2는 RDBMS(관계형데이터베이스)입니다.

매우 빠르고작은 크기의 데이터베이스라고 보시면 됩니다.

주로 메모리에 데이터를 저장하는 용도로 쓰이며, 디스크에 데이터를 저장할수도 있습니다.

환경설정

build.gradle 파일에 h2 데이터베이스 관련 라이브러리 추가해 줍니다.

runtimeOnly 'com.h2database:h2'

스프링 부트 데이터베이스 연결 설정 추가해줍니다.

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa

H2 서버 접속

접속 방법

H2 접속에는 3가지 방법이 있습니다.

첫째) Spring Boot App으로 서버를 기동시켜 localhost:8080/console 로 접속 합니다.

둘째) H2 Console을 실행시켜 윈도우 시스템 트레이에서 H2아이콘을 클릭하면 열립니다.

셋째) H2의 설치 경로에서 bin 폴더로 들어가 h2.bat를 직접 실행합니다.

DB 생성

위와 같이 처음에 접속 했을 때 세팅되어 있을 것입니다.

그러면 JDBC URL에서 볼 수 있듯이 test로 데이터베이스를 생성하겠다는 뜻이고,

연결을 클릭하면 생성된 데이터 베이스로 접속을 합니다.

성공적으로 접속 했을 시 위와 같은 모습으로 접속하게 됩니다.

데이터 베이스의 파일은 C:\Users\사용자이름 경로에 생성됩니다.

설정 삭제 시.

h2database에서 이것 저것 눌러보다가 실수로 삭제 버튼을 누르게 되었습니다.

다시 되돌리고 싶어서 재설치도 해봤는데 그대로 였습니다.

그렇게 찾아보다가 이유를 알게 되었습니다.

원인은 .h2.server.properties 였습니다.

h2를 삭제하고 재설치한다해도 properties는 그대로 있었기 때문에

설정이 돌아오지 않았습니다.

그래서 이 설정을 초기화 시켜줬는데.

#H2 Server Properties
#Fri Jun 22 19:02:35 IST 2018
0=Generic JNDI Data Source|javax.naming.InitialContext|java\:comp/env/jdbc/Test|sa
1=Generic Teradata|com.teradata.jdbc.TeraDriver|jdbc\:teradata\://whomooz/|
10=Generic DB2|com.ibm.db2.jcc.DB2Driver|jdbc\:db2\://localhost/test|
11=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc\:oracle\:thin\:@localhost\:1521\:XE|sa
12=Generic MS SQL Server 
2000|com.microsoft.jdbc.sqlserver.SQLServerDriver|jdbc\:microsoft\:sqlserver\://localhost\:1433;DatabaseName\=sqlexpress|sa
13=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://localhost;DatabaseName\=test|sa
14=Generic PostgreSQL|org.postgresql.Driver|jdbc\:postgresql\:test|
15=Generic MySQL|com.mysql.jdbc.Driver|jdbc\:mysql\://localhost\:3306/test|
16=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc\:hsqldb\:test;hsqldb.default_table_type\=cached|sa
17=Generic Derby (Server)|org.apache.derby.jdbc.ClientDriver|jdbc\:derby\://localhost\:1527/test;create\=true|sa
18=Generic Derby (Embedded)|org.apache.derby.jdbc.EmbeddedDriver|jdbc\:derby\:test;create\=true|sa
19=Generic H2 (Server)|org.h2.Driver|jdbc\:h2\:tcp\://localhost/~/test|sa
2=Generic Snowflake|com.snowflake.client.jdbc.SnowflakeDriver|jdbc\:snowflake\://accountName.snowflakecomputing.com|
20=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:~/test|sa        
3=Generic Redshift|com.amazon.redshift.jdbc42.Driver|jdbc\:redshift\://endpoint\:5439/database|
4=Generic Impala|org.cloudera.impala.jdbc41.Driver|jdbc\:impala\://clustername\:21050/default|
5=Generic Hive 2|org.apache.hive.jdbc.HiveDriver|jdbc\:hive2\://clustername\:10000/default|
6=Generic Hive|org.apache.hadoop.hive.jdbc.HiveDriver|jdbc\:hive\://clustername\:10000/default|
7=Generic Azure SQL|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://name.database.windows.net\:1433|
8=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc\:firebirdsql\:localhost\:c\:/temp/firebird/test|sysdba
9=Generic SQLite|org.sqlite.JDBC|jdbc\:sqlite\:test|sa
webAllowOthers=false
webPort=8082
webSSL=false

properties에 위 내용을 새로 넣어줍니다.

.h2.server.properties zetawiki링크

그러면 다시 초기처럼 세팅들이 돌아와 있는것을 확인 할 수 있었습니다.

생성되지 않았다는 오류

이 경우 에러를 읽어봤을 때, “Database를 찾지 못했다”라는 뜻입니다.

그렇다면 C:\Users\사용자이름 경로로 가서 해당 데이터베이스 파일이 생성되어있는가 확인해봅니다.

만약 데이터베이스가 존재하는데 접속이 안된다라고 하면

계정 디렉토리에서 test.mv.db파일을 삭제한 다음 다시 embedded로 생성을 하고

데이터 베이스에 server로 localhost를 연결하면 해결이 합니다.