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
.
|
|
|