데이터 삽입

Adobe AIR 1.0 이상

데이터베이스에 데이터를 추가하려면 SQL INSERT 문을 실행해야 합니다. 이 문의 실행이 완료되면 새로 삽입된 행의 기본 키가 데이터베이스에서 생성된 경우 해당 키에 액세스할 수 있습니다.

INSERT 문 실행

데이터베이스의 테이블에 데이터를 추가하려면 SQL INSERT 문이 텍스트로 포함된 SQLStatement 인스턴스를 만들고 실행합니다.

다음 예제에서는 SQLStatement 인스턴스를 사용하여 데이터 행을 기존 employees 테이블에 추가하며, 비동기 실행 모드를 사용하여 데이터를 삽입하는 방법을 보여 줍니다. 이 예제에서는 이미 인스턴스화되고 데이터베이스에 연결된 conn 이라는 SQLConnection 인스턴스가 있다고 가정합니다. 또한 “employees” 테이블이 이미 만들어졌다고 가정합니다.

import flash.data.SQLConnection; 
import flash.data.SQLResult; 
import flash.data.SQLStatement; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
     
// ... create and open the SQLConnection instance named conn ... 
     
// create the SQL statement 
var insertStmt:SQLStatement = new SQLStatement(); 
insertStmt.sqlConnection = conn; 
     
// define the SQL text 
var sql:String =  
    "INSERT INTO employees (firstName, lastName, salary) " +  
    "VALUES ('Bob', 'Smith', 8000)"; 
insertStmt.text = sql; 
     
// register listeners for the result and failure (status) events 
insertStmt.addEventListener(SQLEvent.RESULT, insertResult); 
insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError); 
     
// execute the statement 
insertStmt.execute(); 
     
function insertResult(event:SQLEvent):void 
{ 
    trace("INSERT statement succeeded"); 
} 
     
function insertError(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.SQLResult; 
            import flash.data.SQLStatement; 
            import flash.events.SQLErrorEvent; 
            import flash.events.SQLEvent; 
             
            private function init():void 
            { 
                // ... create and open the SQLConnection instance named conn ... 
                 
                // create the SQL statement 
                var insertStmt:SQLStatement = new SQLStatement(); 
                insertStmt.sqlConnection = conn; 
                 
                // define the SQL text 
                var sql:String =  
                    "INSERT INTO employees (firstName, lastName, salary) " +  
                    "VALUES ('Bob', 'Smith', 8000)"; 
                insertStmt.text = sql; 
                 
                // register listeners for the result and failure (status) events 
                insertStmt.addEventListener(SQLEvent.RESULT, insertResult); 
                insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError); 
                 
                // execute the statement 
                insertStmt.execute(); 
            } 
             
            private function insertResult(event:SQLEvent):void 
            { 
                trace("INSERT statement succeeded"); 
            } 
             
            private function insertError(event:SQLErrorEvent):void 
            { 
                trace("Error message:", event.error.message); 
                trace("Details:", event.error.details); 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

다음 예제에서는 동기 실행 모드를 사용하여 데이터 행을 기존 employees 테이블에 추가합니다. 이 예제에서는 이미 인스턴스화되고 데이터베이스에 연결된 conn 이라는 SQLConnection 인스턴스가 있다고 가정합니다. 또한 “employees” 테이블이 이미 만들어졌다고 가정합니다.

import flash.data.SQLConnection; 
import flash.data.SQLResult; 
import flash.data.SQLStatement; 
import flash.errors.SQLError; 
     
// ... create and open the SQLConnection instance named conn ... 
     
// create the SQL statement 
var insertStmt:SQLStatement = new SQLStatement(); 
insertStmt.sqlConnection = conn; 
     
// define the SQL text 
var sql:String =  
    "INSERT INTO employees (firstName, lastName, salary) " +  
    "VALUES ('Bob', 'Smith', 8000)"; 
insertStmt.text = sql; 
     
try 
{ 
    // execute the statement 
    insertStmt.execute(); 
     
    trace("INSERT statement succeeded"); 
} 
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.SQLResult; 
            import flash.data.SQLStatement; 
            import flash.errors.SQLError; 
             
            private function init():void 
            { 
                // ... create and open the SQLConnection instance named conn ... 
                 
                // create the SQL statement 
                var insertStmt:SQLStatement = new SQLStatement(); 
                insertStmt.sqlConnection = conn; 
                 
                // define the SQL text 
                var sql:String =  
                    "INSERT INTO employees (firstName, lastName, salary) " +  
                    "VALUES ('Bob', 'Smith', 8000)"; 
                insertStmt.text = sql; 
                 
                try 
                { 
                    // execute the statement 
                    insertStmt.execute(); 
                    trace("INSERT statement succeeded"); 
                } 
                catch (error:SQLError) 
                { 
                    trace("Error message:", error.message); 
                    trace("Details:", error.details); 
                } 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

삽입된 행에 대해 데이터베이스에서 생성된 기본 키 검색

데이터 행을 테이블에 삽입한 후 코드에서는 새로 삽입된 행에 대해 데이터베이스에서 생성된 기본 키나 행 식별자 값을 알고 있어야 하는 경우가 많습니다. 예를 들어, 한 테이블에 행을 삽입하고 관련된 테이블에 행을 추가하려고 할 수 있습니다. 이 경우 관련된 테이블에서 기본 키 값을 외래 키로 삽입할 수 있습니다. 새로 삽입된 행의 기본 키는 문 실행으로 연관된 SQLResult 객체를 사용하여 검색할 수 있습니다. 이것은 SELECT 문이 실행된 후 결과 데이터에 액세스하는 데 사용되는 객체와 동일합니다. 다른 SQL 문의 경우와 마찬가지로 INSERT 문의 실행이 완료되면 런타임은 SQLResult 인스턴스를 만듭니다. 이벤트 리스너를 사용하거나 동기 실행 모드를 사용하는 경우 SQLStatement 객체의 getResult() 메서드를 호출하여 SQLResult 인스턴스에 액세스합니다. 또는 비동기 실행 모드를 사용하고 Responder 인스턴스를 execute() 호출에 전달하는 경우 SQLResult 인스턴스가 결과 핸들러 함수에 인수로 전달됩니다. 어떤 경우에서든 실행된 SQL 문이 INSERT 문인 경우 가장 최근에 삽입된 행의 행 식별자가 포함된 lastInsertRowID 속성이 SQLResult 인스턴스에 있습니다.

다음 예제에서는 비동기 실행 모드에서 삽입된 행의 기본 키에 액세스하는 방법을 보여 줍니다.

insertStmt.text = "INSERT INTO ..."; 
     
insertStmt.addEventListener(SQLEvent.RESULT, resultHandler); 
     
insertStmt.execute(); 
     
function resultHandler(event:SQLEvent):void 
{ 
    // get the primary key 
    var result:SQLResult = insertStmt.getResult(); 
     
    var primaryKey:Number = result.lastInsertRowID; 
    // do something with the primary key 
} 

다음 예제에서는 동기 실행 모드에서 삽입된 행의 기본 키에 액세스하는 방법을 보여 줍니다.

insertStmt.text = "INSERT INTO ..."; 
     
try 
{ 
    insertStmt.execute(); 
     
    // get the primary key 
    var result:SQLResult = insertStmt.getResult(); 
     
    var primaryKey:Number = result.lastInsertRowID; 
    // do something with the primary key 
} 
catch (error:SQLError) 
{ 
    // respond to the error 
} 

행 식별자는 다음 규칙에 따라 테이블 정의에서 기본 키 열로 지정된 열의 값일 수도 있고 아닐 수도 있습니다.

  • 선호도(열 데이터 유형)가 INTEGER 인 기본 키 열을 사용하여 테이블이 정의된 경우 lastInsertRowID 속성에는 해당 행에 삽입된 값(또는 AUTOINCREMENT 열인 경우 런타임에서 생성된 값)이 포함되어 있습니다.

  • 선호도가 INTEGER 가 아닌 단일 기본 키 열이나 여러 기본 키 열(복합 키)을 사용하여 테이블이 정의된 경우 내부적으로 데이터베이스에서 행에 대한 정수 행 식별자 값을 생성합니다. 생성된 값은 lastInsertRowID 속성의 값입니다.

  • 값은 항상 가장 최근에 삽입된 행의 행 식별자입니다. INSERT 문이 행을 삽입하는 트리거를 발생시키는 경우 lastInsertRowID 속성에는 INSERT 문으로 만들어진 행 대신 트리거로 삽입된 마지막 행의 행 식별자가 포함됩니다.

이러한 규칙에 따라 INSERT 명령 후 SQLResult.lastInsertRowID 속성을 통해 값을 사용할 수 있는 명시적으로 정의된 기본 키 열을 원하는 경우 INTEGER PRIMARY KEY 열로 열을 정의해야 합니다. 테이블에 명시적 INTEGER PRIMARY KEY 열이 포함되지 않은 경우에도 관련된 테이블과의 관계를 정의하는 측면에서는 데이터베이스에서 생성된 행 식별자를 테이블의 기본 키로 동일하게 사용할 수 있습니다. 행 식별자 열 값은 특수 열 이름 ROWID , _ROWID_ 또는 OID 중 하나를 사용하여 모든 SQL 문에서 사용할 수 있습니다. 명시적으로 선언된 INTEGER PRIMARY KEY 열을 사용하는 경우와 마찬가지로 관련된 테이블에서 외래 키 열을 만들고 행 식별자 값을 외래 키 열 값으로 사용할 수 있습니다. 이 점에서 자연 키 대신 임의의 기본 키를 사용하는 경우 런타임에서 기본 키 값을 생성하는 것을 꺼리지 않는 한 두 테이블 간의 외래 키 관계를 정의하기 위한 테이블의 기본 키로 INTEGER PRIMARY KEY 열을 사용하는 경우와 시스템에서 생성된 행 식별자를 사용하는 경우 사이에는 거의 차이가 없습니다.

기본 키와 생성된 행 식별자에 대한 자세한 내용은 로컬 데이터베이스의 SQL 지원 을 참조하십시오.