系列文章導航
- Adobe AIR中使用Flex串連Sqlite資料庫(1)(建立資料庫和表)
- Adobe AIR中使用Flex串連Sqlite資料庫(2)(添加,刪除,修改以及語句參數)
- Adobe AIR中使用Flex串連Sqlite資料庫(3)(查詢)
- Adobe AIR中使用Flex串連Sqlite資料庫(4)(事務)
- Flex,Fms3相關文章索引
- Fms3和Flex打造線上群組視訊會議和視訊交談(附原代碼)
- 免費美女視訊交談,群組視訊會議功能加強版本(Fms3和Flex開發(附源碼))
本章主要總結資料庫的插入,刪除,修改,以及語句參數的使用
本章提到的同步和非同步作業,不明白的可以看上篇文章
http://www.cnblogs.com/aierong/archive/2009/01/22/flex_Sqlite_1.html
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"
6.代碼下載
http://files.cnblogs.com/aierong/Air_Test_SQLite2.rar
收藏與分享
收藏到QQ書籤 添加到百度搜藏 添加到雅虎收藏
RSS訂閱我 什麼是RSS?