| 包 | 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
隐藏继承的公共属性
显示继承的公共属性