Adobe AIR中使用Flex連接Sqlite數據庫(2)(添加,刪除,修改以及語句參數)

 本章主要總結數據庫的插入,刪除,修改,以及語句參數的使用

0.SQLStatement類介紹
SQLStatement實例用於針對通過 SQLConnection 實例打開的本地 SQL 數據庫執行 SQL 語句。
SQLStatement實例通過將 SQLConnection 實例設置爲 SQLStatement 實例的 sqlConnection 屬性的值來鏈接到 SQLConnection 實例。text 屬性用要執行的 SQL 語句的實際文本進行填充。如有必要,可以使用 parameters 屬性指定 SQL 語句參數的值,並通過調用 execute() 方法執行該語句。


1.插入數據
同步版本:

import mx.controls.Alert;
private var con:SQLConnection;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 var stmt:SQLStatement = new SQLStatement();
 
 try
 {
  con.open(file);
  
  stmt.sqlConnection = con; 
  stmt.text="INSERT INTO emp (firstName, lastName, salary) VALUES ('f', 'l', 88)";
  stmt.execute(); 
 }
 catch(error:SQLError)
 {
  Alert.show(error.message);
  Alert.show(error.details);
 }
}

代碼說明:
SQLStatement類的實例用於針對通過 SQLConnection 實例打開的本地 SQL 數據庫執行 SQL 語句

2.得到已插入行的數據庫生成的行標識
得到自動增長列的行標識數值

var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = con; 
stmt.text="INSERT INTO emp (firstName, lastName, salary) VALUES ('f', 'l', 88)";
stmt.execute();
 
var result:SQLResult = stmt.getResult(); 
var primaryKey:Number = result.lastInsertRowID; 
    
Alert.show(primaryKey.toString());

代碼說明:
SQLResult 類提供對爲響應 SQL 語句(SQLStatement 實例)執行而返回的數據的訪問
lastInsertRowID屬性:上次生成的行標識符(由 SQL INSERT 語句生成),如果執行的語句不是 INSERT 語句,則該值爲 0。

3.語句參數的使用
在多次使用一個 SQL 語句但該語句中的值不同的情況下,最佳方法是使用包括參數的 SQL 語句而不是在 SQL 文本中包括字面值。參數是語句文本中的一個佔位符,每次執行語句時都將它替換爲實際的值。
參數名稱由“:”或“@”字符後跟一個名稱組成,例如::itemName  @firstName
還可以使用未命名參數,使用“?”字符表示 SQL 語句中的參數。按照參數在語句中的順序,每個參數都分配有一個數字索引,數字索引從索引 0(表示第一個參數)開始。

使用參數的優點:
1.性能更佳
2.顯式數據類型指定
3.安全性更高

實例代碼:得到自動增長列的行標識數值(異步版本

private var stmt1:SQLStatement;
private function GetlastInsertRowID():void
{
 stmt1 = new SQLStatement();
 stmt1.sqlConnection = con; 
 
 stmt1.text="INSERT INTO emp (firstName, lastName, salary) VALUES (@firstName, @lastName, @salary)";
 stmt1.parameters["@firstName"]="f";
 stmt1.parameters["@lastName"]="l";
 stmt1.parameters["@salary"]=88;  
 
 stmt1.addEventListener(SQLEvent.RESULT,okHandler);
 stmt1.addEventListener(SQLErrorEvent.ERROR,errorHandler);
 stmt1.execute();
}

private function okHandler(evt:SQLEvent):void
{
 Alert.show("插入成功");
 var re:SQLResult= this.stmt1.getResult();
 var id:Number=re.lastInsertRowID;
 Alert.show(id.toString());
}

private function errorHandler(evt:SQLErrorEvent):void
{
 Alert.show("失敗");
 Alert.show(evt.error.message);
 Alert.show(evt.error.details);
}


代碼說明:
此例題中用到了語句參數@firstName, @lastName, @salary,並分別賦值
要是使用未命名參數,把代碼修改如下即可(注意數字索引從0開始):

stmt1.text="INSERT INTO emp (firstName, lastName, salary) VALUES (?, ?, ?)";
stmt1.parameters[0]="f";
stmt1.parameters[1]="l";
stmt1.parameters[2]=88;

4.刪除操作

private function del():void
{
 var stmt:SQLStatement = new SQLStatement();
 stmt.sqlConnection = con; 
 stmt.text="delete from emp where salary=:salary";
 stmt.parameters[":salary"]=88;
 stmt.execute();
 
 var result:SQLResult = stmt.getResult(); 
    var count:Number = result.rowsAffected;
    
    Alert.show("成功刪除"+count.toString()+"行"); 
}


代碼說明:
rowsAffected屬性:指示受此操作影響的行數
請注意,當相關的 SQL 操作爲不帶 WHERE 子句的 DELETE 語句時(即該語句刪除表中的所有行),rowsAffected 屬性始終爲 0,而不管刪除了多少行。如果您需要知道刪除的行數,則可以包括 WHERE 子句 WHERE 1 = 1,在這種情況下,將刪除所有行,並且 rowsAffected 屬性會精確反映已刪除的行數

5.修改操作

private function updateData():void
{
 var stmt:SQLStatement = new SQLStatement();
 stmt.sqlConnection = con; 
 stmt.text="update emp set lastName=:lastName where salary=:salary";
 stmt.parameters[":lastName"]="la";
 stmt.parameters[":salary"]=88;
 stmt.execute();
 
 var result:SQLResult = stmt.getResult(); 
    var count:Number = result.rowsAffected;
    
    Alert.show("成功修改"+count.toString()+"行"); 
}


代碼說明:
把salary=88的lastName修改爲"la"代碼下載

發佈了15 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章