데이터베이스 생성 및 수정

Adobe AIR 1.0 이상

응용 프로그램에서 데이터를 추가하거나 검색하려면 응용 프로그램에서 액세스할 수 있는 테이블이 정의되어 있는 데이터베이스가 있어야 합니다. 여기에서는 데이터베이스를 만들고 데이터베이스에 데이터 구조를 만드는 작업에 대해 설명합니다. 이러한 작업은 데이터 삽입 및 검색보다 자주 사용되지 않지만 대부분의 응용 프로그램에 필요합니다.

데이터베이스 생성

데이터베이스 파일을 만들려면 먼저 SQLConnection 인스턴스를 만듭니다. open() 메서드를 호출하여 동기 실행 모드에서 이 인스턴스를 열거나 openAsync() 메서드를 호출하여 비동기 실행 모드에서 이 인스턴스를 엽니다. open()openAsync() 메서드는 데이터베이스에 대한 연결을 여는 데 사용됩니다. reference 매개 변수(첫 번째 매개 변수)의 존재하지 않는 파일 위치를 참조하는 File 인스턴스를 전달하는 경우 open() 또는 openAsync() 메서드는 해당 파일 위치에 데이터베이스 파일을 만들고 새로 만든 데이터베이스에 대한 연결을 엽니다.

데이터베이스를 만들 때 호출한 메서드가 open()이든 openAsync()이든 간에 데이터베이스 파일의 이름은 임의의 파일 확장명이 있는 임의의 유효한 파일 이름일 수 있습니다. reference 매개 변수에 null을 사용하여 open() 또는 openAsync() 메서드를 호출하면 디스크에 데이터베이스 파일이 만들어지지 않고 새로운 메모리 내 데이터베이스가 만들어집니다.

다음 코드 샘플에서는 비동기 실행 모드를 사용하여 데이터베이스 파일(새 데이터베이스)을 만드는 과정을 보여 줍니다. 이 경우 데이터베이스 파일이 “DBSample.db”라는 파일 이름으로 응용 프로그램 저장소 디렉토리 가리키기에 저장됩니다.

import flash.data.SQLConnection; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
import flash.filesystem.File; 
     
var conn:SQLConnection = new SQLConnection(); 
     
conn.addEventListener(SQLEvent.OPEN, openHandler); 
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
conn.openAsync(dbFile); 
     
function openHandler(event:SQLEvent):void 
{ 
    trace("the database was created successfully"); 
} 
     
function errorHandler(event:SQLErrorEvent):void 
{ 
    trace("Error message:", event.error.message); 
    trace("Details:", event.error.details); 
} 
<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.data.SQLConnection; 
            import flash.events.SQLErrorEvent; 
            import flash.events.SQLEvent; 
            import flash.filesystem.File; 
             
            private function init():void 
            { 
                var conn:SQLConnection = new SQLConnection(); 
                 
                conn.addEventListener(SQLEvent.OPEN, openHandler); 
                conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
                  
                // The database file is in the application storage directory 
                var folder:File = File.applicationStorageDirectory; 
                var dbFile:File = folder.resolvePath("DBSample.db"); 
                 
                conn.openAsync(dbFile); 
            } 
             
            private function openHandler(event:SQLEvent):void 
            { 
                trace("the database was created successfully"); 
            } 
             
            private function errorHandler(event:SQLErrorEvent):void 
            { 
                trace("Error message:", event.error.message); 
                trace("Details:", event.error.details); 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>
참고: File 클래스를 사용하면 특정한 기본 파일 경로를 가리킬 수 있지만, 이로 인해 응용 프로그램이 플랫폼 간에 작동하지 않을 수 있습니다. 예를 들어 경로 C:\Documents and Settings\joe\test.db는 Windows에서만 작동합니다. 따라서 앞의 예제에서처럼 File.applicationStorageDirectoryresolvePath() 메서드 같은 File 클래스의 정적 속성을 사용하는 것이 가장 좋습니다. 자세한 내용은 File 객체의 경로를 참조하십시오.

작업을 동기적으로 실행하려면 SQLConnection 인스턴스를 사용하여 데이터베이스 연결을 열 때 open() 메서드를 호출합니다. 다음 예제에서는 작업을 동기적으로 실행하는 SQLConnection 인스턴스를 만들고 여는 방법을 보여 줍니다.

import flash.data.SQLConnection; 
import flash.errors.SQLError; 
import flash.filesystem.File; 
     
var conn:SQLConnection = new SQLConnection(); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
try 
{ 
    conn.open(dbFile); 
    trace("the database was created successfully"); 
} 
catch (error:SQLError) 
{ 
    trace("Error message:", error.message); 
    trace("Details:", error.details); 
} 
<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.data.SQLConnection; 
            import flash.errors.SQLError; 
            import flash.filesystem.File; 
             
            private function init():void 
            { 
                var conn:SQLConnection = new SQLConnection(); 
                 
                // The database file is in the application storage directory 
                var folder:File = File.applicationStorageDirectory; 
                var dbFile:File = folder.resolvePath("DBSample.db"); 
                  
                try 
                { 
                    conn.open(dbFile); 
                    trace("the database was created successfully"); 
                } 
                catch (error:SQLError) 
                { 
                    trace("Error message:", error.message); 
                    trace("Details:", error.details); 
                } 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

데이터베이스 테이블 생성

데이터베이스에서 테이블을 만들려면 SELECT, INSERT 등의 SQL 문을 실행하는 데 사용하는 동일한 과정을 사용하여 해당 데이터베이스에 대해 SQL 문을 실행해야 합니다. 이때 사용하는 문은 새 테이블의 열과 제약 조건에 대한 정의가 포함된 CREATE TABLE입니다. SQL 문 실행에 대한 자세한 내용은 SQL 문 작업을 참조하십시오.

다음 예제에서는 비동기 실행 모드를 사용하여 기존 데이터베이스 파일에 "employees"라는 테이블을 만드는 방법을 보여 줍니다. 이 코드에서는 이미 인스턴스화되어 데이터베이스에 연결되어 있는 conn이라는 SQLConnection 인스턴스가 있다고 가정합니다.

import flash.data.SQLConnection; 
import flash.data.SQLStatement; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
     
// ... create and open the SQLConnection instance named conn ... 
     
var createStmt:SQLStatement = new SQLStatement(); 
createStmt.sqlConnection = conn; 
     
var sql:String =  
    "CREATE TABLE IF NOT EXISTS employees (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
createStmt.text = sql; 
     
createStmt.addEventListener(SQLEvent.RESULT, createResult); 
createStmt.addEventListener(SQLErrorEvent.ERROR, createError); 
     
createStmt.execute(); 
     
function createResult(event:SQLEvent):void 
{ 
    trace("Table created"); 
} 
     
function createError(event:SQLErrorEvent):void 
{ 
    trace("Error message:", event.error.message); 
    trace("Details:", event.error.details); 
}
<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.data.SQLConnection; 
            import flash.data.SQLStatement; 
            import flash.events.SQLErrorEvent; 
            import flash.events.SQLEvent; 
             
            private function init():void 
            { 
                // ... create and open the SQLConnection instance named conn ... 
                 
                var createStmt:SQLStatement = new SQLStatement(); 
                createStmt.sqlConnection = conn; 
                 
                var sql:String =  
                    "CREATE TABLE IF NOT EXISTS employees (" +  
                    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
                    "    firstName TEXT, " +  
                    "    lastName TEXT, " +  
                    "    salary NUMERIC CHECK (salary > 0)" +  
                    ")"; 
                createStmt.text = sql; 
                 
                createStmt.addEventListener(SQLEvent.RESULT, createResult); 
                createStmt.addEventListener(SQLErrorEvent.ERROR, createError); 
                 
                createStmt.execute(); 
            } 
             
            private function createResult(event:SQLEvent):void 
            { 
                trace("Table created"); 
            } 
             
            private function createError(event:SQLErrorEvent):void 
            { 
                trace("Error message:", event.error.message); 
                trace("Details:", event.error.details); 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

다음 예제에서는 동기 실행 모드를 사용하여 기존 데이터베이스 파일에서 “employees”라는 테이블을 만드는 방법을 보여 줍니다. 이 코드에서는 이미 인스턴스화되어 데이터베이스에 연결되어 있는 conn이라는 SQLConnection 인스턴스가 있다고 가정합니다.

import flash.data.SQLConnection; 
import flash.data.SQLStatement; 
import flash.errors.SQLError; 
     
// ... create and open the SQLConnection instance named conn ... 
     
var createStmt:SQLStatement = new SQLStatement(); 
createStmt.sqlConnection = conn; 
     
var sql:String =  
    "CREATE TABLE IF NOT EXISTS employees (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
createStmt.text = sql; 
     
try 
{ 
    createStmt.execute(); 
    trace("Table created"); 
} 
catch (error:SQLError) 
{ 
    trace("Error message:", error.message); 
    trace("Details:", error.details); 
} 
<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.data.SQLConnection; 
            import flash.data.SQLStatement; 
            import flash.errors.SQLError; 
             
            private function init():void 
            { 
                // ... create and open the SQLConnection instance named conn ... 
                 
                var createStmt:SQLStatement = new SQLStatement(); 
                createStmt.sqlConnection = conn; 
                 
                var sql:String =  
                    "CREATE TABLE IF NOT EXISTS employees (" +  
                    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
                    "    firstName TEXT, " +  
                    "    lastName TEXT, " +  
                    "    salary NUMERIC CHECK (salary > 0)" +  
                    ")"; 
                createStmt.text = sql; 
                 
                try 
                { 
                    createStmt.execute(); 
                    trace("Table created"); 
                } 
                catch (error:SQLError) 
                { 
                    trace("Error message:", error.message); 
                    trace("Details:", error.details); 
                } 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>