| 套件 | flash.data |
| 類別 | public class SQLResult |
| 繼承 | SQLResult Object |
| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0 |
藉由呼叫 SQLStatement.getResult() 方法,或當做引數傳遞至對 SQLStatement.execute() 或 SQLStatement.next() 的呼叫中指定之 Responder 實體的結果處理常式,便可以存取 SQL 陳述式的 SQLResult 實體。一般而言,開發人員程式碼不會直接建構 SQLResult 實體。
您可以使用 SQLResult 物件存取 SELECT 陳述式傳回的資料列 (使用 data 屬性)、取得 INSERT 陳述式的列識別名稱 (使用 lastInsertRowID 屬性)、判斷受 INSERT、UPDATE 或 DELETE 陳述式影響的列數 (使用 rowsAffected 屬性),或者判斷是否有其他尚未擷取的 SELECT 結果列 (使用 complete 屬性)。
相關 API 元素
| 屬性 | 定義自 | ||
|---|---|---|---|
| complete : Boolean [唯讀]
指出是否已傳回陳述式執行的所有結果資料。 | SQLResult | ||
![]() | constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | |
| data : Array [唯讀]
陳述式執行後所傳回的結果資料,特別是指執行了 SQL SELECT 陳述式之後。 | SQLResult | ||
| lastInsertRowID : Number [唯讀]
SQL INSERT 陳述式最後產生的列識別名稱。 | SQLResult | ||
| rowsAffected : Number [唯讀]
指出有多少列已受到作業的影響。 | SQLResult | ||
| 方法 | 定義自 | ||
|---|---|---|---|
建立 SQLResult 實體。 | SQLResult | ||
![]() |
指出物件是否有已定義的指定屬性。 | Object | |
![]() |
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | |
![]() |
指出指定的屬性是否存在,以及是否可列舉。 | Object | |
![]() |
為迴圈作業設定動態屬性的可用性。 | Object | |
![]() |
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | |
![]() |
會傳回指定之物件的字串形式。 | Object | |
![]() |
會傳回指定之物件的基本值。 | Object | |
complete | 屬性 |
complete:Boolean [唯讀] | 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0 |
指出是否已傳回陳述式執行的所有結果資料。
當陳述式傳回一列或多列時,此屬性會指出是否已傳回所有列。搭配 prefetch 引數值呼叫 SQLStatement 物件的 execute() 方法時,只會傳回 SQLResult 物件之 data 屬性中指定的結果資料列數。對 SQLStatement.next() 的後續呼叫可提供額外的資料。此屬性會用來判斷最後一個結果何時傳回。
請注意,由於執行時列數為未知,因此當陳述式的執行被視為完成之前,必須將資料庫指標移至最後一列後方。搭配 prefetch 引數呼叫 SQLStatement.execute() 方法時,在最後產生之 SQLResult 實體的 complete 屬性為 true 之前,必須要求至少比結果集內總列數還多一的列數。
實作
public function get complete():Boolean相關 API 元素
data | 屬性 |
data:Array [唯讀] | 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0 |
陳述式執行後所傳回的結果資料,特別是指執行了 SQL SELECT 陳述式之後。
當陳述式傳回一或多個列,此屬性是一個陣列,包含代表結果資料列的物件。在這個陣列中,每一個物件的屬性名稱都會對應至結果資料集的欄名稱。
例如,假設您執行以下的 SQL SELECT 陳述句:
SELECT lastName, firstName
FROM employees
假設 employees 表格包含 10 個列,SQLResult.data 屬性是一個包含 10 個元素的陣列。每一個元素都是包含lastName 以及 firstName 這兩個屬性的物件。
當您使用 SELECT 陳述式而且其中有一結果欄很複雜,例如 aggregate 函數,則這種情況就變得更複雜。例如,假設您執行以下的 SQL:
SELECT departmentId, SUM(salary)
FROM employees
GROUP BY departmentId
在這個陳述式執行的結果中,data 陣列中的每一個物件有兩個屬性,分別是 departmentId 和 SUM(salary)。不過,"SUM(salary)" 不是有效的識別名稱。若您使用計算欄,例如 aggregate 或其他函數,可以為 SQL 陳述式中的計算欄指定一個別名。在結果資料物件中,別名是用於做為屬性名稱。例如,在前面的陳述式中考慮使用這種替代方式:
SELECT departmentId, SUM(salary) AS salarySubtotal
FROM employees
GROUP BY departmentId
在這個陳述式的 data 陣列中,結果物件有兩個屬性,分別是 departmentId 和 salarySubtotal。
data 屬性永遠是陣列,無論結果集中存在多少列和多少欄。例如,以下的 SELECT 陳述式會產生一列以及一欄,實質上是一個值:
SELECT COUNT(*) AS numEmployees
FROM employees
執行查詢後,data 屬性包含一個 Array 物件,裡面有一個元素。該元素是一個只有單一屬性 numEmployees 物件。
若結果資料中存在重複的欄名稱,例如,若 SELECT 陳述式包含兩個不同表格的兩個互異的 id 欄,則會根據 SQLConnection.columnNameStyle 屬性的值,提供屬性名稱給重複的名稱。根據預設值,會以每一欄的名稱做為屬性名稱,不過若結果集中有很多名稱相同的欄,則完整名稱格式 [table-name]_[column-name] 會用於名稱完全一樣的欄。設定 SQLConnection.columnNameStyle 屬性可以變更這種行為。
根據預設值,data 陣列中的物件為 Object 實體。不過,將 SQLStatement.itemClass 屬性的值設定到類別,則 data 陣列元素反而會建立成該類別的實體。對於結果資料集中的每一欄,itemClass 類別必須要有屬性,而且它的名稱必須與欄名稱一模一樣。
若陳述式未傳回任何資料,則此屬性為 null。若陳述式不是 SELECT 陳述式,或者若它是一個會傳回 0 個列的 SELECT 陳述式。
實作
public function get data():Array相關 API 元素
範例 ( 如何使用本範例 )
itemClass 屬性,讓執行階段從 SQL SELECT 陳述式結果建立自訂類別的實體。
// Employee class definition
package
{
public class Employee
{
public var name:String;
public var ssn:String;
public var id:uint;
public override function toString():String
{
return "id: "+ id.toString() + " name: " + name + " ssn: " + ssn;
}
}
}
// using the Employee class as SQLStatement.itemClass
var conn:SQLConnection;
var dbStatement:SQLStatement;
function init():void
{
conn = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, connOpenHandler);
dbStatement = new SQLStatement();
dbStatement.sqlConnection = conn;
dbStatement.text = "SELECT id, name, ssn FROM employees";
dbStatement.itemClass = Employee;
var dbFile:File = new File(File.separator + "employee.db");
conn.open(dbFile);
}
function connOpenHandler(event:SQLEvent):void
{
dbStatement.addEventListener(SQLEvent.RESULT, resultHandler);
dbStatement.execute();
}
function resultHandler(event:SQLEvent):void
{
var result:SQLResult = dbStatement.getResult();
if (result != null)
{
var emp:Employee;
var numRows:int = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
emp = result.data[i];
trace(emp.toString());
}
}
}
lastInsertRowID | 屬性 |
lastInsertRowID:Number [唯讀] | 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0 |
SQL INSERT 陳述式最後產生的列識別名稱。
如果執行的陳述式並非 INSERT 陳述式,該值便為 0。
列識別名稱可用來唯一識別資料庫中表格內的列。資料庫會頻繁地產生這個值。
如需有關主索引鍵和所產生列識別名稱的詳細資訊,請參閱附錄「本機資料庫中的 SQL 支援」內的「CREATE TABLE」和「運算式」一節。
實作
public function get lastInsertRowID():Number相關 API 元素
rowsAffected | 屬性 |
rowsAffected:Number [唯讀] | 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0 |
指出有多少列已受到作業的影響。只有 INSERT、UPDATE 或 DELETE 陳述式直接指定的變更才會產生影響。
觸發器所造成的附屬變更則不算在內。您可以使用 SQLConnection.totalChanges 屬性,找出包含觸發器所造成之變更的變更總數。
請注意,當相關的 SQL 作業為 DELETE 陳述式且不具備 WHERE 子句 (亦即,此陳述式會刪除表格中所有列) 時,無論有多少列遭刪除,rowsAffected 屬性必定為 0。如果您必須得知遭刪除的列數,可以加入 WHERE 子句 WHERE 1 = 1,如此一來,所有列都會遭到刪除,而且 rowsAffected 屬性將會正確反映遭到刪除的列數。不過,視遭刪除的列數而定,這麼做可能會導致陳述式的效能降低。
實作
public function get rowsAffected():Number相關 API 元素
SQLResult | () | 建構函式 |
public function SQLResult(data:Array = null, rowsAffected:Number = 0, complete:Boolean = true, rowID:Number = 0)| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0 |
建立 SQLResult 實體。一般而言,開發人員程式碼不會直接呼叫 SQLResult 建構函式。若要擷取與特定 SQLStatement 實體相關聯的 SQLResult 實體,請呼叫該實體的 getResult() 方法。如果呼叫 execute() 或 next() 方法時指定了 Responder 實體,那麼也會傳遞 SQLResult 實體做為結果處理常式函數的引數。
data:Array (default = null) — 陳述式執行後傳回的列陣列。如果陳述式沒有傳回任何列,則此值應為 null。
| |
rowsAffected:Number (default = 0) — 指出執行的陳述式影響了多少列。
| |
complete:Boolean (default = true) — 指出是否還有可供取得的其他列或是否已傳回所有資料。
| |
rowID:Number (default = 0) — 如果該陳述式為 SQL INSERT 作業,則此參數會是該列的新唯一識別名稱。
|
Tue Jun 12 2018, 03:47 PM Z
隱藏繼承公用屬性
顯示繼承公用屬性