Bir veritabanından veri alma

Adobe AIR 1.0 ve üstü

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.