Veritabanı oluşturma ve değiştirme

Adobe AIR 1.0 ve üstü

Uygulamanızın verileri ekleyebilmesi ve getirebilmesi için, uygulamanızın erişebileceği, içinde tanımlanmış tablolar bulunan bir veritabanı gereklidir. Burada, bir veritabanı oluşturma ve bir veritabanı içindeki veri yapısını oluşturmaya ilişkin görevler tanımlanmıştır. Bu görevler veri ekleme ve veri getirmeden daha az kullanılsa da, çoğu uygulama için gereklidir.

Veritabanı oluşturma

Bir veritabanı dosyası oluşturmak için, önce bir SQLConnection örneği oluşturursunuz. Bunu senkronize yürütme modunda açmak için open() yöntemini veya senkronize olmayan yürütme modunda açmak için openAsync() yöntemini çağırırsınız. open() ve openAsync() yöntemleri, bir veritabanı bağlantısını açmak için kullanılır. reference parametresine (ilk parametre) ilişkin var olmayan bir dosyaya başvuran bir File örneği ilettiğinizde, open() veya openAsync() yöntemi bu dosya konumunda bir veritasbanı dosyası oluşturur ve yeni oluşturulan veritabanına bağlantı kurar.

Veritabanı oluşturmak için open() yöntemini veya openAsync() yöntemini çağırdığınızda, veritabanı dosyasının adı herhangi bir dosya adı uzantısına sahip olan herhangi bir geçerli dosya adı olabilir. reference parametresi için null değeriyle open() veya openAsync() yöntemini çağırdığınızda, diskteki bir veritabanı dosyası yerine yeni bir bellek içi veritabanı oluşturulur.

Aşağıdaki kod listesi, senkronize yürütme modu yoluyla bir veritabanı dosyası (yeni bir veritabanı) oluşturma işlemini gösterir. Bu durumda, veritabanı dosyası Uygulama depolama dizinine işaret etme “DBSample.db” dosya adıyla kaydedilir:

import flash.data.SQLConnection; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
import flash.filesystem.File; 
     
var conn:SQLConnection = new SQLConnection(); 
     
conn.addEventListener(SQLEvent.OPEN, openHandler); 
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
conn.openAsync(dbFile); 
     
function openHandler(event:SQLEvent):void 
{ 
    trace("the database was created successfully"); 
} 
     
function errorHandler(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.events.SQLErrorEvent; 
            import flash.events.SQLEvent; 
            import flash.filesystem.File; 
             
            private function init():void 
            { 
                var conn:SQLConnection = new SQLConnection(); 
                 
                conn.addEventListener(SQLEvent.OPEN, openHandler); 
                conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
                  
                // The database file is in the application storage directory 
                var folder:File = File.applicationStorageDirectory; 
                var dbFile:File = folder.resolvePath("DBSample.db"); 
                 
                conn.openAsync(dbFile); 
            } 
             
            private function openHandler(event:SQLEvent):void 
            { 
                trace("the database was created successfully"); 
            } 
             
            private function errorHandler(event:SQLErrorEvent):void 
            { 
                trace("Error message:", event.error.message); 
                trace("Details:", event.error.details); 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>
Not: File sınıfı belirli bir yerel dosya yoluna işaret etmenize izin verse de, bunu yapmak farklı platformlar üzerinde çalışmayacak uygulamalara sebep olabilir. Örneğin, C:\Documents and Settings\cem\test.db yalnızca Windows'da çalışır. Bu sebeplerden dolayı, File sınıfı'nın statik özelliklerini kullanmak en iyisidir, örneğin File.applicationStorageDirectory ve resolvePath() yöntemi (önceki örnekte gösterildiği gibi). Daha fazla bilgi için, bkz. File nesnelerinin Yolları.

SQLConnection örneğiyle bir veritabanı bağlantısını açtığınızda, işlemleri senkronize olarak yürütmek için open() yöntemini çağırın. Aşağıdaki örnek, işlemlerini senkronize olarak yürüten bir SQLConnection örneğinin nasıl oluşturulacağını ve açılacağını gösterir:

import flash.data.SQLConnection; 
import flash.errors.SQLError; 
import flash.filesystem.File; 
     
var conn:SQLConnection = new SQLConnection(); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
try 
{ 
    conn.open(dbFile); 
    trace("the database was created successfully"); 
} 
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.errors.SQLError; 
            import flash.filesystem.File; 
             
            private function init():void 
            { 
                var conn:SQLConnection = new SQLConnection(); 
                 
                // The database file is in the application storage directory 
                var folder:File = File.applicationStorageDirectory; 
                var dbFile:File = folder.resolvePath("DBSample.db"); 
                  
                try 
                { 
                    conn.open(dbFile); 
                    trace("the database was created successfully"); 
                } 
                catch (error:SQLError) 
                { 
                    trace("Error message:", error.message); 
                    trace("Details:", error.details); 
                } 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

Veritabanı tabloları oluşturma

Veritabanında bir tablo oluşturma, bir SQL ifadesini yürütmek için kullandığınız SELECT, INSERT vb. gibi bir işlemin aynısını kullanarak bu veritabanında bir SQL ifadesi yürütmeyi içerir. Tablo oluşturmak için, sütun tanımlarını ve yeni tabloya ilişkin sınırlamaları içeren CREATE TABLE ifadesini kullanırsınız. SQL ifadelerini yürütme hakkında daha fazla bilgi için bkz. SQL ifadeleriyle çalışma.

Aşağıdaki örnek, var olan bir veritabanı dosyasında senkronize olmayan yürütme modunu kullanarak “çalışanlar” adlı bir tablo oluşturmayı gösterir. Bu kodun somut olarak gösterilmiş ve bir veritabanına bağlanmış conn adı altında bir SQLConnection örneğini varsaydığını unutmayın.

import flash.data.SQLConnection; 
import flash.data.SQLStatement; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
     
// ... create and open the SQLConnection instance named conn ... 
     
var createStmt:SQLStatement = new SQLStatement(); 
createStmt.sqlConnection = conn; 
     
var sql:String =  
    "CREATE TABLE IF NOT EXISTS employees (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
createStmt.text = sql; 
     
createStmt.addEventListener(SQLEvent.RESULT, createResult); 
createStmt.addEventListener(SQLErrorEvent.ERROR, createError); 
     
createStmt.execute(); 
     
function createResult(event:SQLEvent):void 
{ 
    trace("Table created"); 
} 
     
function createError(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.SQLStatement; 
            import flash.events.SQLErrorEvent; 
            import flash.events.SQLEvent; 
             
            private function init():void 
            { 
                // ... create and open the SQLConnection instance named conn ... 
                 
                var createStmt:SQLStatement = new SQLStatement(); 
                createStmt.sqlConnection = conn; 
                 
                var sql:String =  
                    "CREATE TABLE IF NOT EXISTS employees (" +  
                    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
                    "    firstName TEXT, " +  
                    "    lastName TEXT, " +  
                    "    salary NUMERIC CHECK (salary > 0)" +  
                    ")"; 
                createStmt.text = sql; 
                 
                createStmt.addEventListener(SQLEvent.RESULT, createResult); 
                createStmt.addEventListener(SQLErrorEvent.ERROR, createError); 
                 
                createStmt.execute(); 
            } 
             
            private function createResult(event:SQLEvent):void 
            { 
                trace("Table created"); 
            } 
             
            private function createError(event:SQLErrorEvent):void 
            { 
                trace("Error message:", event.error.message); 
                trace("Details:", event.error.details); 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

Aşağıdaki örnek, varolan bir veritabanı dosyasında senkronize yürütme modunu kullanarak “çalışanlar” adlı bir tablonun nasıl oluşturulacağını gösterir. Bu kodun somut olarak gösterilmiş ve bir veritabanına bağlanmış conn adı altında bir SQLConnection örneğini varsaydığını unutmayın.

import flash.data.SQLConnection; 
import flash.data.SQLStatement; 
import flash.errors.SQLError; 
     
// ... create and open the SQLConnection instance named conn ... 
     
var createStmt:SQLStatement = new SQLStatement(); 
createStmt.sqlConnection = conn; 
     
var sql:String =  
    "CREATE TABLE IF NOT EXISTS employees (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
createStmt.text = sql; 
     
try 
{ 
    createStmt.execute(); 
    trace("Table created"); 
} 
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.SQLStatement; 
            import flash.errors.SQLError; 
             
            private function init():void 
            { 
                // ... create and open the SQLConnection instance named conn ... 
                 
                var createStmt:SQLStatement = new SQLStatement(); 
                createStmt.sqlConnection = conn; 
                 
                var sql:String =  
                    "CREATE TABLE IF NOT EXISTS employees (" +  
                    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
                    "    firstName TEXT, " +  
                    "    lastName TEXT, " +  
                    "    salary NUMERIC CHECK (salary > 0)" +  
                    ")"; 
                createStmt.text = sql; 
                 
                try 
                { 
                    createStmt.execute(); 
                    trace("Table created"); 
                } 
                catch (error:SQLError) 
                { 
                    trace("Error message:", error.message); 
                    trace("Details:", error.details); 
                } 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>