包 | flash.data |
类 | public class SQLResult |
继承 | SQLResult Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
SQL 语句的 SQLResult 实例是通过调用 SQLStatement.getResult()
方法或作为传递给对 SQLStatement.execute()
或 SQLStatement.next()
的调用中指定的 Responder 实例的结果处理函数的参数进行访问的。通常,开发人员代码不直接构造 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
语句包含复杂的结果列(如聚合函数),这种情形更复杂。例如,假设您将执行下列 SQL:
SELECT departmentId, SUM(salary) FROM employees GROUP BY departmentId
在此语句的结果中,data
数组中的每个对象都包含两个属性,分别为 departmentId
和 SUM(salary)
。但是,“SUM(salary)”不是有效的标识符。如果您使用的是计算列(如聚合函数或其他函数),请在 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 支持”中的“创建表”和“表达式”部分。
实现
public function get lastInsertRowID():Number
相关 API 元素
rowsAffected | 属性 |
rowsAffected:Number
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
表示受此操作影响的行数。只有直接由 INSERT
、UPDATE
或 DELETE
语句指定的更改才计算在内。
由触发器导致的辅助更改不计算在内。使用 SQLConnection.totalChanges
属性可得到总更改数(包括触发器引发的更改)。
请注意,当相关的 SQL 操作为不带 WHERE
子句的 DELETE
语句时(即该语句删除表中的所有行),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, 11:04 AM Z