본문 바로가기
Back-end/JAVA

[JAVA] SQLite 무작정 시작하기 (1) - DATABASE 연결/해제

by 허도치 2020. 11. 15.
서론

  이번에 Quartz로 Crawler 스케줄러를 만들면서 수집한 데이터를 저장하고 이력을 관리하기위한 저장소가 필요했다. Oracle, MariaDB, MongoDB 등 다양한 선택지가 있었지만, 필요할 때마다 서버를 실행해야하는 번거로움이 있었다. 그래서, Serverless의 SQLite를 써보기로 하였다.

 

 

 

SQLite란?

  경량 RDBMS 라이브러리이며, 별도로 설치할 필요가 없고 프로그램 내에 자체포함되어 서버가 필요한 MySQL, PostgreSQL와는 달리 서버가 필요 없다. 또한, 기본적으로는 DB가 파일로 생성되지만, DB를 메모리에 생성하여 작업을 매우 빠르게 처리할 수 있다. 

 

 

 

개발환경
1. JAVA 버전

  - jdk-11.0.5

 

2. pom.xml
1
2
3
4
5
6
7
<!-- JDBC Drivers -->
<dependency>
  <groupId>org.xerial</groupId>
  <artifactId>sqlite-jdbc</artifactId>
  <version>3.27.2.1</version>
</dependency>
<!-- JDBC Drivers -->
cs

 

 

 

소스코드
1. SQLiteManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.dochi.db.ex;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
 
public class SQLiteManager {
 
    // 상수 설정
    //   - Database 변수
    private static final String SQLITE_JDBC_DRIVER = "org.sqlite.JDBC";
    private static final String SQLITE_FILE_DB_URL = "jdbc:sqlite:quartz.db";
    private static final String SQLITE_MEMORY_DB_URL = "jdbc:sqlite::memory";
 
    //  - Database 옵션 변수
    private static final boolean OPT_AUTO_COMMIT = false;
    private static final int OPT_VALID_TIMEOUT = 500;
 
    // 변수 설정
    //   - Database 접속 정보 변수
    private Connection conn = null;
    private String driver = null;
    private String url = null;
 
    // 생성자
    public SQLiteManager(){
        this(SQLITE_FILE_DB_URL);
    }
    public SQLiteManager(String url) {
        // JDBC Driver 설정
        this.driver = SQLITE_JDBC_DRIVER;
        this.url = url;
    }
 
    // DB 연결 함수
    public Connection createConnection() {
        try {
            // JDBC Driver Class 로드
            Class.forName(this.driver);
 
            // DB 연결 객체 생성
            this.conn = DriverManager.getConnection(this.url);
 
            // 로그 출력
            System.out.println("CONNECTED");
 
            // 옵션 설정
            //   - 자동 커밋
            this.conn.setAutoCommit(OPT_AUTO_COMMIT);
 
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
 
        return this.conn;
    }
 
    // DB 연결 종료 함수
    public void closeConnection() {
        try {
            ifthis.conn != null ) {
                this.conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            this.conn = null;
 
            // 로그 출력
            System.out.println("CLOSED");
        }
    }
 
    // DB 재연결 함수
    public Connection ensureConnection() {
        try {
            ifthis.conn == null || this.conn.isValid(OPT_VALID_TIMEOUT) ) {
                closeConnection();      // 연결 종료
                createConnection();     // 연결
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
 
        return this.conn;
    }
 
    // DB 연결 객체 가져오기
    public Connection getConnection() {
        return this.conn;
    }
}
 
cs

 

2. App.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.dochi.db.ex;
 
import java.sql.SQLException;
 
import com.dochi.db.ex.DDLService;
import com.dochi.db.ex.DDLService.ResultType;
 
public class App {
 
    public static void main(String[] args) throws SQLException {
        SQLiteManager manager = new SQLiteManager();
 
        manager.createConnection();     // 연결
        manager.closeConnection();      // 연결 해제
        manager.ensureConnection();     // 재연결
    }
}
 
cs

 

 

 

실행결과

[ DATABASE 파일 생성 확인 ]
[ SQLite 접속 로그 ]

 

 

 

마치며

   확실히 다른 RDBMS를 쓸 때보다 가볍고, 사용하기 편했다. 앞으로는 간단하게 DB를 써야할 일이 있으면 SQLite를 사용해봐야겠다. 다음 포스트에서는 테이블을 생성하고 삭제하는 방법에 대해서 알아보도록 하겠다.

 

댓글