티스토리 뷰

Language/Flex

[ Flex ] SQLite 기초 강좌

MiniNeko 2015. 11. 29. 04:43

<Adobe AIR의 SQLite 사용법>

데이터베이스(DB)에 대해 아시나요?
•데이터베이스는 값들을 구조화하여 입력, 검색 등이 용이하게 만든 자료 저장소입니다..게임을 만들 때 점수를 저장할 수도 있고, 주소록의 이름과 전화번호 등을 저장할 수도 있습니다.. 

그럼 데이터베이스는 어떻게 구조화 할까요?

•데이터베이스에는 여러 개의 테이블을 넣을 수 있고, 각 테이블에는 여러 개의 필드를 넣을 수 있으며, 각 필드는 여러 개의 컬럼을 넣을 수 있습니다.. 

HTML 페이지와 비교하면 이해가 빨리 될 것 같네요..

•하나의 HTML 페이지(데이터베이스)에는 여러 개의 <table>(테이블)을 넣을 수 있고, 각 <table>에는 여러 개의 <tr>(필드)를 넣을 수 있고, <tr>에는 여러 개의 <td>(컬럼)를 넣을 수 있습니다.. 

데이터베이스는 이해가 되었으니 이제 AIR에서 어떻게 DB 파일을 만들고 사용하는지 알아보겠습니다..

일단, SQLite에 대해 간단하게 설명드리죠..

SQLite는 하나의 파일로 된 데이터베이스이며, 기존 SQL 구문의 대부분을 지원하고, 비교적 상당히 빠릅니다..또한, 데이터 타입이 다른 DB(컬럼 중심)와 달리 상당히 유연해서(값 중심) 초보자가 다루기 편합니다..
단, 데이터 입력, 검색등이 많은 큰 프로젝트나 웹 상에서의 프로젝트에는 적합하지 않습니다..개인 또는 소규모의 사람들이 사용하는 프로그램의 DB로는 최상이라 할 수 있습니다..

일단, DB파일로 사용할 파일 경로를 지정합니다..찾기 쉽도록 바탕화면에 만들죠..
var file:File = File.desktopDirectory.resolvePath("test.db"); //바탕화면에 DB파일 생성

그리고 중복 코드를 피하기 위해 쿼리를 실행하는 함수를 하나 만듭니다..
function sendQuery(syntax:String, prefetch:int=-1, 
responder:Responder=null):void { //쿼리 실행
var stm:SQLStatement = new SQLStatement();
stm.sqlConnection = this.conn;
stm.text = syntax;
stm.execute(prefetch, responder); //prefetch : 가져올 데이터 개수(-1이면 모두), responder : 결과, 상태 Responder
}

1.DB 파일 만들기 
•DB 파일이 없다면 생성한 다음 열고, 있다면 그냥 파일을 엽니다.. 
var conn:SQLConnection = new SQLConnection(); //DB를 연결합니다..
conn.open(file);

2.Table 생성 
•DB를 만들었으니 테이블을 생성해야겠죠? 테이블을 생성할 때 필드에 들어갈 컬럼 이름과 데이터 타입들을 함께 입력합니다.. 
var syntax:String = "CREATE TABLE IF NOT EXISTS testTable (" + 
"no INTEGER PRIMARY KEY AUTOINCREMENT," + 
"title TEXT," + 
"url INTEGER" +
")";
this.sendQuery(syntax);

3.Table 확인 
•테이블이 실제 만들어졌는지 확인합니다.. 
try {
this.conn.loadSchema();
var schemaResult:SQLSchemaResult = this.conn.getSchemaResult();
if (schemaResult) {
for(var obj:String in schemaResult.tables){
var table:SQLTableSchema = schemaResult.tables[obj] as SQLTableSchema;
trace("[" + table.name + "]", "스키마(Schema)");
for(var prop:String in table.columns){
var column:SQLColumnSchema = table.columns[prop] as SQLColumnSchema;
trace("name:", column.name, ",dataType:", column.dataType, ",primaryKey:", column.primaryKey, ",allowNull:", column.allowNull, ",autoIncrement:", column.autoIncrement, ",defaultCollationType:", column.defaultCollationType);
}
}
}
} catch(e:Error) {
trace("테이블이 없습니다.");
}

4.DB가 만들어 졌습니다..간단하죠? 이제 데이터를 넣어보겠습니다.. 
var syntax:String;
syntax = "INSERT INTO testTable (title, url) VALUES ('Adobe AIR Devpia.', 'http://airdev.tistory.com/')"; //no는 자동으로 증가
this.sendQuery(syntax);
syntax = "INSERT INTO testTable (title, url) VALUES ('아폴로케이션[Apollocation]', 'http://cafe.naver.com/apollocation')"; //no는 자동으로 증가
this.sendQuery(syntax);

5.데이터가 잘 들어갔는지 확인도 해봐야겠죠? 
var syntax:String = "SELECT * FROM testTable";
var responder:Responder = new Responder(
function(e:SQLResult):void {
var result:Array = e.data;
var numRows:int = result.length;
for(var i:int = 0; i < numRows; i++){
trace("필드 번호 :", i);
for(var columnName:String in result[i]){
trace(columnName + " :", result[i][columnName]);
}
}
}
);
this.sendQuery(syntax, -1, responder);

/*
필드 번호 : 0
no : 1
url : http://airdev.tistory.com/
title : Adobe AIR Devpia.
필드 번호 : 1
no : 2
url : http://cafe.naver.com/apollocation
title : 아폴로케이션[Apollocation]
*/

6.테이블을 삭제할 수도 있어야죠? 
var syntax:String = "DROP TABLE testTable";
this.sendQuery(syntax);

7.테이블이 삭제가 되었는지 확인해 봅니다.. 
•위 3번 참조 

Lite라서 그런지 아기자기한 느낌으로 즐겁게 작업할 수 있어서 좋네요^^
플래시(Flash), 플렉스(Flex) 개발자 분들도 AIR 공부하셔서 재밌는거 많이 만들어 보세요~AS 3를 안다면 AIR는 어도비(Adobe)가 그냥 주는 선물입니다 : )

Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
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