套件 | 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