일반 Pure Java DB (H2 Database)

황제낙엽 2010.09.27 19:52 조회 수 : 332 추천:121

sitelink1  
sitelink2  
extra_vars5
extra_vars6 ko 

* h2 설치 (택1)

  > 최신 jar (2025.05.03) : h2-2.3.232.jar

  > gradle denpendencies 추가

    - runtimeOnly 'com.h2database:h2:2.2.224'

* 샘플 코드

  - jar 를 classpath 에 추가후 다음과 같은 java 클래스를 생성후 실행한다.

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

 

public class H2Example {

    private static final String JDBC_URL = "jdbc:h2:./mydbtest"; // 현재 디렉토리에 mydb.mv.db 파일 생성

    private static final String USER = "sa";

    private static final String PASSWORD = "";

 

    public static void main(String[] args) {

        Connection conn = null;

        Statement stmt = null;

 

        try {

            // JDBC 드라이버 로드 (H2는 자동 로드되므로 명시적으로 필요하지 않을 수 있음)

            Class.forName("org.h2.Driver");

 

            // 데이터베이스 연결

            conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);

            System.out.println("H2 데이터베이스에 연결되었습니다.");

 

            // Statement 객체 생성

            stmt = conn.createStatement();

 

            // 테이블 생성 SQL 쿼리

            String createTableSQL = "CREATE TABLE IF NOT EXISTS users (" +

                    "id INT PRIMARY KEY AUTO_INCREMENT, " +

                    "name VARCHAR(255), " +

                    "age INT)";

 

            // 테이블 생성 실행

            stmt.executeUpdate(createTableSQL);

            System.out.println("users 테이블이 생성되었습니다.");

 

            // 데이터 삽입 SQL 쿼리

            String insertDataSQL1 = "INSERT INTO users (name, age) VALUES ('Alice', 30)";

            String insertDataSQL2 = "INSERT INTO users (name, age) VALUES ('Bob', 25)";

 

            // 데이터 삽입 실행

            stmt.executeUpdate(insertDataSQL1);

            stmt.executeUpdate(insertDataSQL2);

            System.out.println("데이터가 삽입되었습니다.");

 

        } catch (ClassNotFoundException e) {

            System.err.println("H2 드라이버를 찾을 수 없습니다: " + e.getMessage());

        } catch (SQLException e) {

            System.err.println("SQL 오류 발생: " + e.getMessage());

        } finally {

            // 리소스 해제 (역순으로)

            try {

                if (stmt != null) stmt.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

            try {

                if (conn != null) conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

            System.out.println("H2 데이터베이스 연결이 닫혔습니다.");

        }

    }

}

 

* 실행하면 콘솔에 다음과 같은 메세지가 출력된다.

H2 데이터베이스에 연결되었습니다.
users 테이블이 생성되었습니다.
데이터가 삽입되었습니다.
H2 데이터베이스 연결이 닫혔습니다.

* class 경로에 'mydbtest.mv.db' 파일이 생성되어 있다. 잘 찾아보자.

* 다음은 공식홈에서 발췌해 왔다.

 

 

 

 

 


Features
    * Very fast database engine
    * Open source
    * Written in Java
    * Supports standard SQL, JDBC API
    * Embedded and Server mode, Clustering support
    * Strong security features
    * The PostgreSQL ODBC driver can be used
    * Multi version concurrency

 


 


Sample Application
  1. 첨부파일 #1 참조
  2. http://www.h2database.com/html/tutorial.html 에서 "Using Databases in Web Applications" 부분 참조

 

 

 


 

 


Test SQL

 

 

 

SET WRITE_DELAY 0;
SET CLUSTER '';
SET DEFAULT_TABLE_TYPE 0;
SET DEFAULT_LOCK_TIMEOUT 2000;
SET CACHE_SIZE 16384;

CREATE USER IF NOT EXISTS SA SALT 'f8752c85c729c186' HASH '883ecfdc106537ace2e018d70b96f50779fcc98fad6150910f3890ac568d9292' ADMIN;

DROP TABLE IF EXISTS PUBLIC.USERINFO;
DROP TABLE IF EXISTS PUBLIC.AUTHORITIES;
DROP TABLE IF EXISTS PUBLIC.EMPLOYEE;

CREATE TABLE PUBLIC.USERINFO(USERNAME VARCHAR(50) NOT NULL PRIMARY KEY,PASSWORD VARCHAR(50) NOT NULL,ENABLED INTEGER DEFAULT 0 NOT NULL);
CREATE TABLE PUBLIC.AUTHORITIES(USERNAME VARCHAR(12) NOT NULL,AUTHORITY VARCHAR(20) NOT NULL);
CREATE TABLE PUBLIC.EMPLOYEE(EMP_NAME VARCHAR(64),PASSWORD VARCHAR(64),EMAIL VARCHAR(64));

INSERT INTO PUBLIC.USERINFO(USERNAME, PASSWORD, ENABLED) VALUES
('admin','admin',1),
('kim','kim',0),
('son','son',1),
('user','user',1);

INSERT INTO PUBLIC.AUTHORITIES(USERNAME, AUTHORITY) VALUES
('admin','ADMIN'),
('admin','USER'),
('user','USER'),
('son','ADMIN'),
('son','USER'),
('kim','USER');

INSERT INTO PUBLIC.EMPLOYEE(EMP_NAME, PASSWORD, EMAIL) VALUES
('admin','admin','admin@gmail.com'),
('user','user','user@gmail.com'),
('son','son','son@gmail.com');

 


 


SQL Grammar

 

 

Commands (Data Manipulation)

SELECT
INSERT
UPDATE
DELETE
BACKUP
CALL
EXPLAIN
MERGE
RUNSCRIPT
SCRIPT
SHOW

 

Commands (Data Definition)

ALTER INDEX RENAME
ALTER SCHEMA RENAME
ALTER SEQUENCE
ALTER TABLE ADD
ALTER TABLE ADD CONSTRAINT
ALTER TABLE ALTER
ALTER TABLE DROP COLUMN
ALTER TABLE DROP CONSTRAINT
ALTER TABLE SET
ALTER TABLE RENAME
ALTER USER ADMIN
ALTER USER RENAME
ALTER USER SET PASSWORD
ALTER VIEW
ANALYZE
COMMENT
CREATE AGGREGATE
CREATE ALIAS
CREATE CONSTANT
CREATE DOMAIN
CREATE INDEX
CREATE LINKED TABLE
CREATE ROLE
CREATE SCHEMA
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE USER
CREATE VIEW
DROP AGGREGATE
DROP ALIAS
DROP ALL OBJECTS
DROP CONSTANT
DROP DOMAIN
DROP INDEX
DROP ROLE
DROP SCHEMA
DROP SEQUENCE
DROP TABLE
DROP TRIGGER
DROP USER
DROP VIEW
TRUNCATE TABLE

 

Commands (Other)

CHECKPOINT
CHECKPOINT SYNC
COMMIT
COMMIT TRANSACTION
GRANT RIGHT
GRANT ROLE
HELP
PREPARE COMMIT
REVOKE RIGHT
REVOKE ROLE
ROLLBACK
ROLLBACK TRANSACTION
SAVEPOINT
SET @
SET ALLOW_LITERALS
SET AUTOCOMMIT
SET CACHE_SIZE
SET CLUSTER
SET COLLATION
SET COMPRESS_LOB
SET DATABASE_EVENT_LISTENER
SET DB_CLOSE_DELAY
SET DEFAULT_LOCK_TIMEOUT
SET DEFAULT_TABLE_TYPE
SET EXCLUSIVE
SET IGNORECASE
SET LOG
SET LOCK_MODE
SET LOCK_TIMEOUT
SET MAX_LENGTH_INPLACE_LOB
SET MAX_LOG_SIZE
SET MAX_MEMORY_ROWS
SET MAX_MEMORY_UNDO
SET MAX_OPERATION_MEMORY
SET MODE
SET MULTI_THREADED
SET OPTIMIZE_REUSE_RESULTS
SET PASSWORD
SET QUERY_TIMEOUT
SET REFERENTIAL_INTEGRITY
SET SALT HASH
SET SCHEMA
SET SCHEMA_SEARCH_PATH
SET THROTTLE
SET TRACE_LEVEL
SET TRACE_MAX_FILE_SIZE
SET UNDO_LOG
SET WRITE_DELAY
SHUTDOWN

 

Other Grammar

Alias
And Condition
Array
Boolean
Bytes
Case
Case When
Cipher
Column Definition
Comments
Compare
Condition
Condition Right Hand Side
Constraint
Constraint Name Definition
Csv Options
Data Type
Date
Decimal
Digit
Dollar Quoted String
Double
Expression
Factor
Hex
Hex Number
Index Column
Int
Long
Name
Null
Number
Operand
Order
Quoted Name
Referential Constraint
Select Expression
String
Summand
Table Expression
Term
Time
Timestamp
Value

 

System Tables

Information Schema
Range Table

 



새로운 데이터베이스의 생성
(http://www.h2database.com/html/tutorial.html#creating_new_databases
)

데이터베이스 연결시 지정한 URL에 데이터베이스가 생성되어 있지 않다면 입력된 데이터베이스명으로 자동 생성된다.
만일 자동 생성을 원치 않는다면 다음과 같은 옵션으로 자동 생성을 막을 수 있다.

 

String url = "jdbc:h2:/data/sample;IFEXISTS=TRUE";

만일 해당 데이터베이스가 존재하지 않는 경우 데이터베이스가 존재하지 않는다는 오류 메세지를 출력한다.