본문 바로가기
Back-end/JAVA

[JAVA] SQLite 무작정 시작하기 (2) - TABLE 생성/삭제

by 허도치 2020. 11. 15.
이전글 목록

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

 

 

 

서론

  이전 포스트에서는 SQLite에 대해서 간단하게 알아보고 DATABASE에 접속/해제하는 방법을 다루어 보았다. 이번 포스트에서는 실제 데이터를 저장할 테이브를 생성하고 삭제하는 방법에 대해서 다루어 볼 계획이다.

 

데이터베이스 인코딩 (UTF-8, UTF-16BE 또는 UTF-16LE)을 사용하여 저장

 

SQLite 데이터타입
데이터타입 설명
NULL NULL 값
INTEGER 부호가 있는 정수, 값의 크기에 따라 1, 2, 3, 4, 6 또는 8 바이트로 저장
REAL 부동 소수점 숫자, 8 바이트로 저장
TEXT 텍스트 문자열, 데이터베이스 인코딩 (UTF-8, UTF-16BE 또는 UTF-16LE)을 사용하여 저장
BLOB
(Binary Large OBject)
입력된 데이터를 그대로 저장

 

 

 

소스코드
1. DDLService.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.dochi.db.ex;
 
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class DDLService extends SQLiteManager {
    // 생성자
    public DDLService() {
    }
    public DDLService(String url) {
        super(url);
    }
 
    // SQL 실행 함수
    public ResultType executeSQL(final String SQL) throws SQLException {
        // 변수설정
        //   - Database 변수
        Connection conn = null;
        Statement stmt = null;
 
        //   - 결과 변수
        ResultType result = ResultType.FAILURE;
 
        try {
            // Database 연결
            conn = ensureConnection();
 
            // Statement 객체  생성
            stmt = conn.createStatement();
 
            // SQL 실행
            stmt.execute(SQL);
 
            // 트랜잭션 COMMIT
            conn.commit();
 
            // 성공
            result = ResultType.SUCCESS;
 
        } catch (SQLException e) {
            // 오류출력
            System.out.println(e.getMessage());
 
            // 트랜잭션 ROLLBACK
            if( conn != null ) {
                conn.rollback();
            }
 
            // 오류
            result = ResultType.FAILURE;
 
        } finally {
            // Statement 종료
            if( stmt != null ) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
 
        // 결과 반환
        return result;
    }
 
    // 테이블 조회 함수
    public boolean checkTable(String tableName) throws SQLException {
        // 변수설정
        //   - Database 변수
        Connection conn = ensureConnection();
        DatabaseMetaData meta = conn.getMetaData();
 
        // 테이블 목록 조회
        ResultSet tables = meta.getTables(nullnull, tableName, null);
 
        // 테이블 생성 확인
        return ( tables.next() ? tables.getRow() != 0 : false );
    }
 
    // 테이블 생성 함수
    public ResultType createTable(String tableName, final String SQL) throws SQLException {
        // 테이블 확인
        if( checkTable(tableName) ) {
            return ResultType.WARNING;
        }
 
        // SQL 실행 및 반환
        return executeSQL(SQL);
    }
 
    // 테이블 삭제 함수
    public ResultType dropTable(String tableName) throws SQLException {
        // 테이블 확인
        if!checkTable(tableName) ) {
            return ResultType.WARNING;
        }
 
        // SQL 실행 및 반환
        return executeSQL("DROP TABLE IF EXISTS "+tableName);
    }
 
    // 결과 코드 정의
    public enum ResultType {
        SUCCESS(1),     // 성공
        WARNING(0),     // 경고
        FAILURE(-1);    // 실패
 
        // 코드 변수
        private int code = 0;
 
        // 코드값 설정
        private ResultType(int code){
            this.code = code;
        }
 
        // 코드값 가져오기
        public int getCode() {
            return this.code;
        }
    }
}
 
cs

 

2. App.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
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 {
 
    // 변수 생성
    //   - DDL 객체 변수 ( dochi.db 파일 생성 )
    private DDLService DDL = new DDLService("jdbc:sqlite:dochi.db");
 
    // 테이블 생성 함수
    public void createTable() throws SQLException {
        //
        final String SQL = "CREATE TABLE IF NOT EXISTS CW_BLOG_ATCL_LIST (   "+"\n"
                         + "  BLOG_ID     TEXT           NOT NULL,           "+"\n"
                         + "  CATE_ID     TEXT           NOT NULL,           "+"\n"
                         + "  ATCL_ID     TEXT           NOT NULL,           "+"\n"
                         + "  URL         TEXT           NOT NULL,           "+"\n"
                         + "  TITLE       TEXT,                              "+"\n"
                         + "  WORK_YN     INTEGER        DEFAULT 0,          "+"\n"
                         + "  REG_DTTM    TEXT,                              "+"\n"
                         + "  UPD_DTTM    TEXT,                              "+"\n"
                         + "  PRIMARY KEY (BLOG_ID, CATE_ID, ARTCL_ID)      )";
 
        // 테이블 생성
        ResultType result = DDL.createTable("CW_BLOG_ATCL_LIST", SQL);
 
        // 테이블 생성 결과 출력
        switch( result ) {
            case SUCCESS:
                System.out.println("테이블 생성 완료.");
                break;
            case WARNING:
                System.out.println("테이블이 이미 존재합니다.");
                break;
            case FAILURE:
                System.out.println("테이블 생성 실패.");
                break;
        }
 
        // DB 연결 종료
        DDL.closeConnection();
    }
 
    // 테이블 삭제 함수
    public void dropTable() throws SQLException {
 
        // 테이블 삭제
        ResultType result = DDL.dropTable("CW_BLOG_ATCL_LIST");
 
        // 테이블 삭제 결과 출력
        switch( result ) {
            case SUCCESS:
                System.out.println("테이블 삭제 완료.");
                break;
            case WARNING:
                System.out.println("테이블이 존재하지 않습니다.");
                break;
            case FAILURE:
                System.out.println("테이블 삭제 실패.");
                break;
        }
 
        // DB 연결 종료
        DDL.closeConnection();
    }
 
    public static void main(String[] args) throws SQLException {
        App db = new App();
 
        db.dropTable();     // 테이블 삭제
        db.createTable();   // 테이블 생성
        db.createTable();   // 테이블 생성
        db.dropTable();     // 테이블 삭제
    }
}
 
cs

 

 

 

실행결과

[ 테이블 생성/삭제 실행 로그 ]

 

 

 

마치며

  이렇게 테이블을 생성해보았다. 나중에 Crawler에서 사용하기위해 예제에서 아예 테이블 구조도 잡아서 만들어봤다. 다음 포스트에서는 CRUD(Create Read Update Delete)에 대해서 다루어 보려고 한다. 소스를 한번에 다 다루게되면 포스트가 너무 길어질것 같으니 각각 하나씩 포스팅 해보도록 하겠다.

 

 

 

댓글