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"代碼下載