이전글 목록
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(null, null, 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)에 대해서 다루어 보려고 한다. 소스를 한번에 다 다루게되면 포스트가 너무 길어질것 같으니 각각 하나씩 포스팅 해보도록 하겠다.
'Back-end > JAVA' 카테고리의 다른 글
[JAVA] SQLite 무작정 시작하기 (4) - SELECT (0) | 2020.11.15 |
---|---|
[JAVA] SQLite 무작정 시작하기 (3) - INSERT (0) | 2020.11.15 |
[JAVA] SQLite 무작정 시작하기 (1) - DATABASE 연결/해제 (0) | 2020.11.15 |
[JAVA] Quartz 스케줄러 만들기 (5) - Crawler Job (0) | 2020.11.12 |
[JAVA] Quartz 스케줄러 만들기 (4) - Step By Step (0) | 2020.11.11 |
댓글