Bir veritabanından veri alma, iki adım içerir. Önce veritabanından almak istediğiniz veri kümesini açıklayan bir SQL
SELECT
ifadesi yürütürsünüz. Daha sonra, alınan verilere erişerek bunları görüntüler ve uygulamanız için gerektirdiği biçimde değiştirirsiniz.
Bir SELECT ifadesi yürütme
Varolan verileri veritabanından almak için bir
SQLStatement
örneği kullanırsınız. Uygun SQL
SELECT
ifadesini örneğin
text
özelliğine atayın, daha sonra
execute()
yöntemini çağırın.
SELECT
ifadesinin sözdizimiyle ilgili ayrıntılar için bkz.
yerel veritabanlarında SQL desteği
.
Aşağıdaki örnek, senkronize olmayan yürütme modunu kullanan “ürünler” adlı tablodan veri almak için
SELECT
ifadesinin yürütülmesini gösterir:
var selectStmt:SQLStatement = new SQLStatement();
// A SQLConnection named "conn" has been created previously
selectStmt.sqlConnection = conn;
selectStmt.text = "SELECT itemId, itemName, price FROM products";
selectStmt.addEventListener(SQLEvent.RESULT, resultHandler);
selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
selectStmt.execute();
function resultHandler(event:SQLEvent):void
{
var result:SQLResult = selectStmt.getResult();
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var output:String = "itemId: " + row.itemId;
output += "; itemName: " + row.itemName;
output += "; price: " + row.price;
trace(output);
}
}
function errorHandler(event:SQLErrorEvent):void
{
// Information about the error is available in the
// event.error property, which is an instance of
// the SQLError class.
}
<?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;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
private function init():void
{
var selectStmt:SQLStatement = new SQLStatement();
// A SQLConnection named "conn" has been created previously
selectStmt.sqlConnection = conn;
selectStmt.text = "SELECT itemId, itemName, price FROM products";
selectStmt.addEventListener(SQLEvent.RESULT, resultHandler);
selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
selectStmt.execute();
}
private function resultHandler(event:SQLEvent):void
{
var result:SQLResult = selectStmt.getResult();
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var output:String = "itemId: " + row.itemId;
output += "; itemName: " + row.itemName;
output += "; price: " + row.price;
trace(output);
}
}
private function errorHandler(event:SQLErrorEvent):void
{
// Information about the error is available in the
// event.error property, which is an instance of
// the SQLError class.
}
]]>
</mx:Script>
</mx:WindowedApplication>
Aşağıdaki örnek, senkronize yürütme modunu kullanan ''ürünler'' adlı tablodan veri almak için
SELECT
ifadesinin yürütülmesini gösterir:
var selectStmt:SQLStatement = new SQLStatement();
// A SQLConnection named "conn" has been created previously
selectStmt.sqlConnection = conn;
selectStmt.text = "SELECT itemId, itemName, price FROM products";
try
{
selectStmt.execute();
var result:SQLResult = selectStmt.getResult();
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var output:String = "itemId: " + row.itemId;
output += "; itemName: " + row.itemName;
output += "; price: " + row.price;
trace(output);
}
}
catch (error:SQLError)
{
// Information about the error is available in the
// error variable, which is an instance of
// the SQLError class.
}
<?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;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
private function init():void
{
var selectStmt:SQLStatement = new SQLStatement();
// A SQLConnection named "conn" has been created previously
selectStmt.sqlConnection = conn;
selectStmt.text = "SELECT itemId, itemName, price FROM products";
try
{
selectStmt.execute();
var result:SQLResult = selectStmt.getResult();
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var output:String = "itemId: " + row.itemId;
output += "; itemName: " + row.itemName;
output += "; price: " + row.price;
trace(output);
}
}
catch (error:SQLError)
{
// Information about the error is available in the
// error variable, which is an instance of
// the SQLError class.
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
Senkronize olmayan yürütme modunda ifadenin yürütülmesi tamamlandığında, SQLStatement örneği ifadenin başarıyla çalıştığını gösteren bir
result
olayı (
SQLEvent.RESULT
) gönderir. Alternatif olarak,
Responder
nesnesi bir argüman olarak
execute()
çağrısına iletildiyse, Responder nesnesinin sonuç işleyici özelliği çağrılır. Senkronize yürütme modunda,
execute()
işlemi tamamlanana kadar yürütme duraklar, daha sonra, sonraki kod satırında devam eder.
SELECT ifadesi sonuç verilerine erişme
SELECT
ifadesinin yürütülmesi tamamlandığında, sonraki adım alınan verilere erişmektir. Sonuç verilerini, SQLStatement nesnesinin
getResult()
yöntemini çağırarak
SELECT
ifadesini yürütme yoluyla geri getirebilirsiniz.
var result:SQLResult = selectStatement.getResult();
getResult()
yöntemi
SQLResult
nesnesini geri getirir. SQLResult nesnesinin
veri
özelliği
SELECT
ifadesinin sonucunu içeren bir Dizidir.
var numResults:int = result.data.length;
for (var i:int = 0; i < numResults; i++)
{
// row is an Object representing one row of result data
var row:Object = result.data[i];
}
SELECT
sonucundaki her veri sütunu,
veri
Dizisinde yer alan bir Nesne örneğidir. Bu nesne, adları sonuç kümesindeki sütun adlarıyla eşleşen özellikler içerir. Özellikler, sonuç kümesinin sütunlarından değerler içerir. Örneğin, bir
SELECT
ifadesinin “öğeKimliği”, “öğeAdı” ve “fiyat” adlı üç sütun içeren bir sonuç kümesi belirttiğini düşünün. Sonuç kümesindeki her satır için
itemId
,
itemName
, and
price
adlı özellikleri içeren bir Object örneği oluşturulur. Bu özellikler, ilgili sütunlarından değerler içerir.
Aşağıdaki kod listelemesi, metni bir
SELECT
ifadesi olan SQLStatement örneğini tanımlar. İfade,
employees
adlı tablonun tüm satırlarının
firstName
ve
lastName
sütun değerlerini içeren satırlarını getirir. Bu örnek senkronize olmayan yürütme modunu kullanır. Yürütme tamamlandığında
selectResult()
yöntemi çağrılır, sonuçlanan veri satırlarına
SQLStatement.getResult()
kullanılarak erişilir ve bu satırlar
trace()
yöntemi kullanılarak görüntülenir. Bu listelemenin önceden başlatılmış ve bir veritabanına bağlanmış
conn
adlı bir SQLConnection örneğinin var olduğunu varsaydığını unutmayın. Ayrıca, “çalışanlar” tablosunun önceden oluşturulduğunu ve veriyle doldurulduğ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 selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"SELECT firstName, lastName " +
"FROM employees";
selectStmt.text = sql;
// register listeners for the result and error events
selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
// execute the statement
selectStmt.execute();
function selectResult(event:SQLEvent):void
{
// access the result data
var result:SQLResult = selectStmt.getResult();
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
var output:String = "";
for (var columnName:String in result.data[i])
{
output += columnName + ": " + result.data[i][columnName] + "; ";
}
trace("row[" + i.toString() + "]\t", output);
}
}
function selectError(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 selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"SELECT firstName, lastName " +
"FROM employees";
selectStmt.text = sql;
// register listeners for the result and error events
selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
// execute the statement
selectStmt.execute();
}
private function selectResult(event:SQLEvent):void
{
// access the result data
var result:SQLResult = selectStmt.getResult();
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
var output:String = "";
for (var columnName:String in result.data[i])
{
output += columnName + ": " + result.data[i][columnName] + "; ";
}
trace("row[" + i.toString() + "]\t", output);
}
}
private function selectError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
]]>
</mx:Script>
</mx:WindowedApplication>
Aşağıdaki kod listelemesi, önceki örnekteki tekniklerin aynısını senkronize yürütme modunda gösterir. Örnek, metni bir
SELECT
ifadesi olan bir
SQLStatement
örneğini tanımlar. İfade,
employees
adlı tablonun tüm satırlarının
firstName
ve
lastName
sütun değerlerini içeren satırlarını getirir. Sonuçlanan veri satırlarına
SQLStatement.getResult()
kullanılarak erişilir ve bu satırlar
trace()
yöntemi kullanılarak görüntülenir. Bu listelemenin önceden başlatılmış ve bir veritabanına bağlanmış
conn
adlı bir SQLConnection örneğinin var olduğunu varsaydığını unutmayın. Ayrıca, “çalışanlar” tablosunun önceden oluşturulduğunu ve veriyle doldurulduğ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 selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"SELECT firstName, lastName " +
"FROM employees";
selectStmt.text = sql;
try
{
// execute the statement
selectStmt.execute();
// access the result data
var result:SQLResult = selectStmt.getResult();
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
var output:String = "";
for (var columnName:String in result.data[i])
{
output += columnName + ": " + result.data[i][columnName] + "; ";
}
trace("row[" + i.toString() + "]\t", output);
}
}
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 selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"SELECT firstName, lastName " +
"FROM employees";
selectStmt.text = sql;
try
{
// execute the statement
selectStmt.execute();
// access the result data
var result:SQLResult = selectStmt.getResult();
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
var output:String = "";
for (var columnName:String in result.data[i])
{
output += columnName + ": ";
output += result.data[i][columnName] + "; ";
}
trace("row[" + i.toString() + "]\t", output);
}
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
SELECT sonuç verilerinin veri türünü tanımlama
Varsayılan olarak,
SELECT
ifadesinin döndürdüğü her satır, sonuç kümesinin sütun adlarıyla adlandırılan özellikler ve her biri ilgili özelliğinin değerine sahip sütun değerini içeren bir Object örneği olarak oluşturulur. Ancak, bir SQL
SELECT
ifadesini yürütmeden önce
SQLStatement
örneğinin
itemClass
özelliğini bir sınıfa ayarlayabilirsiniz.
itemClass
özelliğinin ayarlanmasıyla,
SELECT
ifadesinin döndürdüğü her satır, belirlenen sınıfın bir örneği olarak oluşturulur. Çalışma zamanı,
SELECT
sonuç kümesindeki sütun adlarını
itemClass
sınıfındaki özellik adlarına eşleyerek özellik değerlerine sonuç sütunu değerleri atar.
itemClass
özellik değeri olarak atanan her sınıf, herhangi bir parametre gerektirmeyen bir yapıcı içermelidir. Sınıf ayrıca,
SELECT
ifadesinin döndürdüğü her sütun için tek bir özellik içermelidir.
SELECT
listesindeki bir sütun
itemClass
sınıfında kendisiyle eşleşen bir özellik adına sahip değilse, bu bir hata olarak değerlendirilir.
SELECT sonuçlarını bölümler halinde alma
Varsayılan olarak, bir
SELECT
ifade yürütmesi sonuç kümesinin tüm satırlarını bir seferde alır. İfade tamamlandığında, alınan verileri genellikle nesneler oluşturma veya verileri ekranda görüntüleme gibi bir yolla işlersiniz. İfade çok sayıda satır döndürürse, tüm verilerin bir defada işlenmesi, kullanıcı arabiriminin kendisini yeniden düzenlememesine neden olacak biçimde bilgisayar için zorlayıcı olabilir.
Çalışma zamanına bir defada belirli sayıda sonuç satırı döndürmesini söyleyerek uygulamanızın algılanan performansını iyileştirebilirsiniz. Bu, ilk sonuç verilerinin daha çabuk dönmesini sağlar. Ayrıca sonuç satırlarını kümeler halinde bölümlemenizi ve böylece kullanıcı arabiriminin işlenen her satır kümesinden sonra güncellenmesini sağlar. Bu tekniği kullanmanın yalnızca senkronize olmayan modda kullanışlı olduğunu unutmayın.
SELECT
sonuçlarını bölümler halinde almak için
SQLStatement.execute()
yönteminin ilk parametresi için bir değer belirleyin (
prefetch
parametresi).
prefetch
parametresi, ifade ilk yürütüldüğünde getirilecek satır sayısını gösterir. Bir
SQLStatement
örneğinin
execute()
yöntemini çağırdığınızda bir
prefetch
parametresi belirleyin, yalnızca belirlediğiniz kadar satır getirilir:
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = conn;
stmt.text = "SELECT ...";
stmt.addEventListener(SQLEvent.RESULT, selectResult);
stmt.execute(20); // only the first 20 rows (or fewer) are returned
İfade, ilk sonuç satırı kümesinin kullanılabilir olduğunu gösteren
result
olayını gönderir. Sonuçlanan
SQLResult
örneğinin
data
özelliği, veri satırlarını ve getirilecek ek sonuç satırları olup olmadığını gösteren
complete
özelliğini içerir. Ek sonuç satırlarını almak için SQLStatement örneğinin
next()
yöntemini çağırın.
execute()
yöntemi gibi,
next()
yönteminin ilk parametresi, sonuç olayının sonraki gönderilişinde kaç satır alınacağını göstermek için kullanılır.
function selectResult(event:SQLEvent):void
{
var result:SQLResult = stmt.getResult();
if (result.data != null)
{
// ... loop through the rows or perform other processing ...
if (!result.complete)
{
stmt.next(20); // retrieve the next 20 rows
}
else
{
stmt.removeEventListener(SQLEvent.RESULT, selectResult);
}
}
}
next()
yöntemi sonraki sonuç satırlarını her döndürdüğünde, SQLStatement bir
result
olayı gönderir. Sonuç olarak, tüm satırlar alınana kadar sonuçları (
next()
çağrılarından) işlemeye devam etmek için aynı dinleyici işlevi kullanılabilir.
Daha fazla bilgi için,
SQLStatement.execute()
(
prefetch
parametresinin açıklaması) ve
SQLStatement.next()
yöntemlerinin açıklamalarına bakın.
|
|
|