Veri ekleme

Adobe AIR 1.0 ve üstü

Bir veritabanına veri eklemede, bir SQL INSERT ifadesinin yürütülmesi yer alır. İfadenin yürütülmesi tamamlandığında, veritabanı tarafından oluşturulduysa, yeni eklenen satıra ilişkin ana anahtara erişebilirsiniz.

Bir INSERT ifadesini yürütme

Veritabanındaki bir tabloya veri eklemek için, metni SQL INSERT ifadesi olan bir SQLStatement örneği oluşturur ve bu örneği yürütürsünüz.

Aşağıdaki örnek, önceden var olan çalışanlar tablosuna bir veri satırı eklemek için SQLStatement örneğini kullanır. Bu örnek, senkronize olmayan yürütme modunu kullanarak veri eklemeyi gösterir. Bu listelemenin somut olarak gösterilmiş ve bir veritabanına bağlanmış conn adı altında bir SQLConnection örneğini varsaydığını unutmayın. Ayrıca “çalışanlar” tablosunun önceden oluşturulduğunu varsayar.

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>

Aşağıdaki örnek, senkronize yürütme modunu kullanarak önceden var olan çalışanlar tablosuna bir veri satırı ekler. Bu listelemenin somut olarak gösterilmiş ve bir veritabanına bağlanmış conn adı altında bir SQLConnection örneğini varsaydığını unutmayın. Ayrıca “çalışanlar” tablosunun önceden oluşturulduğunu varsayar.

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>

Eklenen bir satırın veritabanı tarafından oluşturulan ana anahtarını alma

Bir tabloya veri satırı eklendikten sonra kodunuz genellikle yeni eklenen satıra ilişkin veritabanı tarafından oluşturulan ana anahtarı veya satır kimlik değerini bilmek ister. Örneğin, bir tabloya satır eklediğinizde, ilgili bir tabloya satır eklemek isteyebilirsiniz. Bu durumda, ana anahtar değerini ilişkili tabloya yabancı anahtar olarak girmek istersiniz. Yeni eklenen satırın ana anahtarı, ifade yürütme tarafından oluşturulan SQLResult nesnesi kullanılarak alınabilir. Bu, SELECT ifadesinin yürütülmesinden sonra sonuç verilerine erişmek için kullanılan nesnenin aynısıdır. Tüm SQL ifadelerinde olduğu gibi, INSERT ifadesinin yürütülmesi tamamlandığında, çalışma zamanı bir SQLResult örneği oluşturur. Bir olay dinleyicisi veya senkronize yürütme modunu kullanıyorsanız SQLStatement nesnesinin getResult() yöntemini çağırarak SQLResult örneğine erişebilirsiniz. Alternatif olarak, senkronize olmayan yürütme modunu kullanıyorsanız ve execute() çağrısına bir Responder örneği iletirseniz, SQLResult örneği bir argüman olarak sonuç işleyici işlevine iletilir. Her durumda, yürütülen SQL ifadesi bir INSERT ifadesiyse, SQLResult örneği, en son eklenen satırın satır kimliğini içeren bir lastInsertRowID özelliğine sahiptir.

Aşağıdaki örnek, senkronize olmayan yürütme modunda eklenen bir satırın ana anahtarına erişmeyi gösterir:

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 
} 

Aşağıdaki örnek, senkronize yürütme modunda eklenen bir satırın ana anahtarına erişmeyi gösterir:

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 
} 

Aşağıdaki kurallara göre, satır kimliğinin tablo tanımında ana anahtar sütunu olarak belirlenen sütunun değeri olabileceğini veya olmayabileceğini unutmayın:

  • Tablo, yakınlığı (sütun veri türü) INTEGER olan bir ana anahtar sütunuyla tanımlandıysa, lastInsertRowID özelliği, bu satıra eklenen değeri (veya AUTOINCREMENT sütunuysa, çalışma zamanı tarafından oluşturulan değeri) içerir.

  • Tablo birden çok ana anahtar sütunuyla (bileşik anahtar) veya yakınlığı INTEGER olan tek bir ana anahtar sütunuyla tanımlandıysa, veritabanı perde arkasında satıra ilişkin tam sayı olan bir satır kimlik değeri oluşturur. Oluşturulan bu değer, lastInsertRowID özelliğinin değeridir.

  • Değer, her zaman en son eklenen satırın satır kimliğidir. Bir INSERT ifadesi satır ekleyen bir tetikleyicinin çalışmasına neden olursa, lastInsertRowID özelliği, INSERT ifadesinin oluşturduğu satırın değil, tetikleyicinin eklediği son satırın satır kimliğini içerir.

Sonuç olarak, değeri INSERT komutundan sonra SQLResult.lastInsertRowID özelliği aracılığıyla kullanılabilen, açıkça tanımlanmış bir ana anahtar sütununa sahip olmak istiyorsanız, sütun bir INTEGER PRIMARY KEY sütunu olarak tanımlanmalıdır. Tablonuz açık bir INTEGER PRIMARY KEY sütunu içermese bile, ilgili tablolarla ilişkilerin tanımlanması bakımından, tablonuz için ana anahtar olarak veritabanı tarafından oluşturulmuş bir satır kimliği kullanmanın eşit derecede kabul edilebilirdir. Satır kimliği sütun değeri tüm SQL ifadelerinde ROWID, _ROWID_ veya OID adındaki özel sütun adlarından biri aracılığıyla kullanılabilir. İlgili bir tabloda yabancı bir anahtar oluşturabilir ve satır kimlik değerini, açıkça bildirilen INTEGER PRIMARY KEY sütunu için yapacağınız gibi yabancı anahtar sütun değeri olarak kullanabilirsiniz. Bu anlamda, doğan anahtar yerine rasgele bir ana anahtar kullanıyorsanız, çalışma zamanının sizin için ana anahtar değeri oluşturmasını önemsemediğiniz sürece, iki tablo arasındaki yabancı anahtar ilişkisini tanımlamak için tablonun ana anahtarı olarak INTEGER PRIMARY KEY sütunu veya sistem tarafından oluşturulmuş bir satır kimliği kullanmanız arasında çok az fark vardır.

Ana anahtarlar ve oluşturulan satır tanımlayıcıları için bkz. yerel veritabanlarında SQL desteği.