Veri eklemeAdobe 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ütmeVeritabanı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ı almaBir 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:
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. |
|