Пакет | flash.data |
Класс | public class SQLStatement |
Наследование | SQLStatement EventDispatcher Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Чтобы связать экземпляр SQLStatement с экземпляром SQLConnection, необходимо задать экземпляр SQLConnection в качестве значения свойства sqlConnection
экземпляра SQLStatement. Свойство text
заполняется имеющимся текстом выполняемой инструкции SQL. При необходимости значения параметров инструкции SQL задаются с помощью свойства parameters
, а для выполнения самой инструкции нужно вызвать метод execute()
.
Полное описание диалекта SQL, поддерживаемого в локальных базах данных SQL, см. в приложении «Поддержка SQL в локальных базах данных».
В асинхронном режиме выполнения методы execute()
и next()
выполняются в фоновом потоке, и при завершении или сбое операций среда выполнения отправляет события зарегистрированным прослушивателям событий или заданному экземпляру Responder. В синхронном режиме методы выполняются в основном потоке приложения. Это означает, что никакой другой код не может быть выполнен до тех пор, пока не завершатся текущие операции в базе данных. Кроме того, если в синхронном режиме выполнения произошел сбой метода, вместо отправки события ошибки среда выполнения генерирует исключение.
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
executing : Boolean [только для чтения]
Указывает, выполняется ли инструкция в текущий момент. | SQLStatement | ||
itemClass : Class
Обозначает класс (тип данных), который используется для каждой строки, возвращенной в результате выполнения инструкции. | SQLStatement | ||
parameters : Object [только для чтения]
Служит в качестве ассоциативного массива, в который добавляются значения параметров, заданных в свойстве text инструкции SQL. | SQLStatement | ||
sqlConnection : SQLConnection
Объект SQLConnection, который управляет подключением к одной или нескольким базам данных, применительно к которым выполняется инструкция. | SQLStatement | ||
text : String
Фактический текст инструкции SQL. | SQLStatement |
Метод | Определено | ||
---|---|---|---|
Создает экземпляр SQLStatement. | SQLStatement | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. | EventDispatcher | ||
Отменяет выполнение инструкции. | SQLStatement | ||
Удаляет все текущие значения параметров. | SQLStatement | ||
Посылает событие в поток событий. | EventDispatcher | ||
Выполняет инструкцию SQL, которая содержится в свойстве text, применительно к базе данных, подключенной к объекту SQLConnection в свойстве sqlConnection. | SQLStatement | ||
Обеспечивает доступ к объекту SQLResult, который содержит результаты выполнения инструкции, включая все строки результата выполнения инструкции SELECT и другие сведения о выполнении всех выполненных инструкций. | SQLStatement | ||
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. | EventDispatcher | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Извлекает следующую часть результирующего набора инструкции SELECT. | SQLStatement | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | EventDispatcher |
Событие | Сводка | Определено | ||
---|---|---|---|---|
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным. | EventDispatcher | |||
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным. | EventDispatcher | |||
Отправляется, если во время операции произошла ошибка. | SQLStatement | |||
Отправляется при успешном вызове метода execute() или next(). | SQLStatement |
executing | свойство |
executing:Boolean
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Указывает, выполняется ли инструкция в текущий момент.
Это свойство имеет значение true, если после вызова метода execute()
из базы данных были возвращены не все результаты.
Реализация
public function get executing():Boolean
Связанные элементы API
itemClass | свойство |
itemClass:Class
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Обозначает класс (тип данных), который используется для каждой строки, возвращенной в результате выполнения инструкции.
По умолчанию каждая строка, возвращаемая инструкцией SELECT
, создается в виде экземпляра Object, при этом имена столбцов результирующего набора совпадают с именами свойств объекта, а значение каждого столбца равно значению соответствующего свойства.
Если в свойстве itemClass
указать класс, каждая строка, возвращаемая инструкцией SELECT
, которая выполняется данным экземпляром SQLStatement, создается в виде объекта заданного класса. Каждому свойству экземпляра itemClass
присваивается значение из столбца с таким же именем, как и у свойства.
Любой класс, указанный в этом свойстве, должен иметь конструктор без параметров. Кроме того, в этом классе должно быть определено по одному свойству для каждого столбца, возвращаемого инструкцией SELECT
. Считается ошибкой, если у столбца из списка SELECT
в классе itemClass
нет свойства с соответствующим именем.
Реализация
public function get itemClass():Class
public function set itemClass(value:Class):void
Связанные элементы 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()); } } }
parameters | свойство |
parameters:Object
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Служит в качестве ассоциативного массива, в который добавляются значения параметров, заданных в свойстве text
инструкции SQL. Ключами массива являются имена параметров. Если в тексте инструкции имеется параметр без имени, его ключом является индекс параметра.
Внутри текста инструкции SQL параметры обозначаются с помощью одного из следующих символов: «?», «:» или «@».
Маркеры «:» и «@» обозначают именованный параметр, а символы, следующие после маркера, обозначают имя параметра.
Например, в следующей инструкции SQL параметр с именем firstName
задан с помощью символа «:»:
SELECT FROM employees WHERE firstName = :firstName
Маркер «?» обозначает проиндексированный (нумерованный) параметр. Каждому параметру автоматически назначается индекс в зависимости от последовательности параметров в тексте инструкции. Индексы параметров начинаются с нуля. Иными словами, индекс первого параметра равен 0.
Параметры используются для типизированной подстановки значений, которые неизвестны во время создания инструкции SQL. Использование параметров — это единственный способ обеспечить класс хранения значения, передаваемого в базу данных. Если параметры не используются, все значения преобразуются из своего текстового представления к классу хранения с учетом типов соответствующих столбцов. Дополнительные сведения о классах хранения и соответствии столбцов см. в разделе «Поддержка типов данных» в приложении «Поддержка SQL в локальных базах данных».
Параметры также используются как мера безопасности с целью предотвращения такого метода взлома, как атака путем внедрения кода SQL (SQL-инъекция). При атаке путем внедрения кода SQL пользователь вводит код SQL в доступное ему место (например, в поле ввода данных). Если приложение формирует инструкции SQL, непосредственно добавляя в текст инструкции данные, введенные пользователем, то в базе данных выполнится код SQL, введенный злоумышленником. В следующем примере показано добавление данных, введенных пользователем, в текст инструкции SQL. Этот способ использовать нельзя:
// assume the variables "username" and "password" // contain user-entered data var sql:String = "SELECT userId " + "FROM users " + "WHERE username = '" + username + "' " + " AND password = '" + password + "'"; var statement:SQLStatement = new SQLStatement(); statement.text = sql;
Использование параметров инструкции вместо добавления в его текст пользовательских значений предотвращает атаку путем внедрения кода SQL, потому что значения параметров обрабатываются явным образом как подставляемые значения, а не становятся частью текста инструкции. Ниже приведена рекомендуемая альтернатива предыдущему примеру:
// assume the variables "username" and "password" // contain user-entered data var sql:String = "SELECT userId " + "FROM users " + "WHERE username = :username " + " AND password = :password"; var statement:SQLStatement = new SQLStatement(); statement.text = sql; // set parameter values statement.parameters[":username"] = username; statement.parameters[":password"] = password;
Перед выполнением инструкции должны быть заданы значения всех параметров. Связывание (т. е. объединение с текстом инструкции) значений параметров, заданных в массиве parameters
, осуществляется при вызове метода execute()
. После вызова метода execute()
никакие последующие изменения значений не будут применены к выполняемой инструкции. Однако при последующем вызове метода execute()
будут использоваться измененные значения. Если в тексте инструкции есть параметр, для которого в свойстве parameters
не задано значение, возникнет ошибка.
Чтобы удалить значения всех параметров в свойстве parameters
, используется метод clearParameters()
.
Реализация
public function get parameters():Object
Связанные элементы API
Пример ( Использование этого примера )
:firstName
в инструкции SQL.
// employees is a SQLStatement instance employees.text = "SELECT FROM employees WHERE first = :firstName"; employees.parameters[":firstName"] = "Sam"; employees.execute();
// employees is a SQLStatement instance employees.text = "SELECT FROM employees WHERE first = ?"; employees.parameters[0] = "Sam"; employees.execute();
sqlConnection | свойство |
sqlConnection:SQLConnection
Версии среды выполнения: | AIR 1.0 |
Объект SQLConnection, который управляет подключением к одной или нескольким базам данных, применительно к которым выполняется инструкция.
Реализация
public function get sqlConnection():SQLConnection
public function set sqlConnection(value:SQLConnection):void
Выдает
IllegalOperationError — Если во время выполнения инструкции была предпринята попытка изменить значение этого свойства.
|
text | свойство |
text:String
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Фактический текст инструкции SQL.
Текстом может быть любая допустимая конструкция языка SQL. Полное описание диалекта SQL, поддерживаемого в локальных базах данных SQL, см. в приложении «Поддержка SQL в локальных базах данных».
Реализация
public function get text():String
public function set text(value:String):void
Выдает
IllegalOperationError — Если во время выполнения инструкции была предпринята попытка изменить значение свойства text .
|
SQLStatement | () | Конструктор |
public function SQLStatement()
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Создает экземпляр SQLStatement.
Выдает
SecurityError — Если конструктор вызывается из какой-либо изолированной среды за пределами главной изолированной среды приложения.
|
cancel | () | метод |
public function cancel():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Отменяет выполнение инструкции. Как и метод SQLConnection.cancel()
, данный метод используется, чтобы остановить продолжительный запрос или отменить запрос, находящийся в процессе выполнения. Однако, в отличие от метода SQLConnection.cancel()
, этот метод отменяет только одну инструкцию. Если инструкции в текущий момент не выполняются, в результате вызова этого метода ничего не произойдет.
Непосредственно в ответ на завершение операции cancel()
события не отправляются. Однако, если завершается операция cancel()
и отменяется выполнение инструкции, экземпляр SQLStatement отправляет событие error
, которое обозначает, что выполнение инструкции (вызов метода execute()
или next()
) не завершено. Если же при вызове метода execute()
или next()
задано значение параметра responder
, будет вызван соответствующий обработчик ошибки. В любом случае у экземпляра SQLError, передаваемого прослушивателям, свойство errorID
будет иметь значение 3118 («Операция прервана»).
clearParameters | () | метод |
execute | () | метод |
public function execute(prefetch:int = -1, responder:Responder = null):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Выполняет инструкцию SQL, которая содержится в свойстве text
, применительно к базе данных, подключенной к объекту SQLConnection в свойстве sqlConnection
.
Если аргумент responder
имеет значение, отличное от null
, указанный объект Responder определяет методы, вызываемые для обработки результатов операции. Если аргумент responder
имеет значение null
, при успешном завершении операции в асинхронном режиме отправляется событие result
, а при сбое — событие error
.
Чтобы просмотреть результат выполнения инструкции, например строки, созданные в результате выполнения инструкции SELECT
, или первичный ключ инструкции INSERT
, созданный базой данных, необходимо вызвать метод getResult()
. Результаты можно просмотреть сразу после выполнения инструкции в синхронном режиме, а также после отправки события result
в асинхронном режиме.
Перед выполнением каждая инструкция должна быть подготовлена (скомпилирована). При первом вызове метода execute()
экземпляра SQLStatement среда выполнения подготавливает инструкцию. Когда инструкция подготовлена, она больше не требует повторной подготовки до тех пор, пока не изменится свойство text
. Задание одного или нескольких параметров не требует повторной подготовки инструкции.
Параметры
prefetch:int (default = -1 ) — Когда в свойстве text задана инструкция SELECT , это значение обозначает количество строк, возвращаемых инструкцией за один раз. Значение по умолчанию равно -1. Это значит, что все строки результата будут возвращены инструкцией за один раз. Этот параметр используется совместно с методом next() для разделения больших результирующих наборов на меньшие наборы данных. При более быстром возврате результатов и разделении операций по их обработке приложение будет восприниматься пользователями как более производительное.
Если инструкция SQL представляет собой запрос | |
responder:Responder (default = null ) — Объект, для которого определены методы, вызываемые при успешном выполнении или сбое операции. При асинхронном режиме выполнения, если аргумент responder имеет значение null , по окончании выполнения отправляется событие result или error .
|
События
result: — Отправляется после успешного выполнения инструкции или в том случае, если указано значение аргумента prefetch , а инструкция SELECT возвращает одну или несколько строк данных.
| |
error: — Отправляется после сбоя операции в асинхронном режиме выполнения.
|
Выдает
IllegalOperationError — Если свойство text имеет значение null или содержит пустую строку ("" ); если свойство sqlConnection не задано; если экземпляр SQLConnection, указанный в свойстве sqlConnection , не подключен или если оператор выполняется в текущий момент.
| |
SQLError — Если произошел сбой операции в синхронном режиме выполнения.
|
Связанные элементы API
Пример ( Использование этого примера )
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"; var dbFile:File = new File(File.separator + "employee.db"); conn.open(dbFile); } function connOpenHandler(event:SQLEvent):void { dbStatement.addEventListener(SQLEvent.RESULT, resultHandler); dbStatement.addEventListener(SQLErrorEvent.ERROR, errorHandler); dbStatement.execute(); } function resultHandler(event:SQLEvent):void { var result:SQLResult = dbStatement.getResult(); if (result != null) { var numRows:int = result.data.length; for (var i:int = 0; i < numRows; i++) { var row:Object = result.data[i]; trace("id:", row.id, ", name:", row.name, ", ssn:", row.ssn); } } } function errorHandler(event:SQLErrorEvent):void { trace("An error occured while executing the statement."); }
var conn:SQLConnection; var dbStatement:SQLStatement; var employeeResponder:Responder; 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"; var dbFile:File = new File(File.separator + "employee.db"); conn.open(dbFile); } function connOpenHandler(event:SQLEvent):void { employeeResponder = new Responder(resultHandler, errorHandler); dbStatement.execute(-1, employeeResponder); } function resultHandler(result:SQLResult):void { if (result != null) { var numRows:int = result.data.length; for (var i:int = 0; i < numRows; i++) { var row:Object = result.data[i]; trace("id:", row.id, ", name:", row.name, ", ssn:", row.ssn); } } } function errorHandler(error:SQLError):void { trace("An error occured while executing the statement."); }
getResult | () | метод |
public function getResult():SQLResult
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Обеспечивает доступ к объекту SQLResult, который содержит результаты выполнения инструкции, включая все строки результата выполнения инструкции SELECT
и другие сведения о выполнении всех выполненных инструкций. В асинхронном режиме выполнения данные результата не будут доступны, пока не отправлено событие result
.
Если при выполнении инструкции SELECT
метод execute()
вызван с аргументом prefetch
, имеющим значение по умолчанию -1, возвращаемый объект SQLResult будет содержать весь результирующий набор запроса.
Если аргумент prefetch
указан при вызове метода execute()
или next()
, метод getResult()
работает как очередь результатов с порядком доступа к элементам «первым поступил — первым обслужен» (FIFO, First In — First Out). Каждый раз при отправке события result
к очереди добавляется новый объект SQLResult. Каждый раз при вызове метода getResult()
возвращается и удаляется из очереди самый первый объект SQLResult (тот, который был добавлен в очередь первым). Если в очереди не осталось объектов SQLResult, метод getResult()
возвращает null
.
Следует заметить, что до удаления с помощью метода getResult()
объекты SQLResult остаются в очереди. Например, если метод execute()
вызывается несколько раз без вызова метода getResult()
, объекты SQLResult, связанные с каждым вызовом метода execute()
, остаются в очереди.
SQLResult — Объект SQLResult, который содержит результат вызова метода execute() или next() .
|
Связанные элементы API
next | () | метод |
public function next(prefetch:int = -1, responder:Responder = null):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Извлекает следующую часть результирующего набора инструкции SELECT
. Если в результирующем наборе больше не осталось строк, событие result
отправляется, но в очередь getResult()
больше не добавляются объекты SQLResult.
В асинхронном режиме выполнения, если аргумент responder
имеет значение, отличное от null
, указанный объект Responder обозначает методы, вызываемые для обработки результатов операции. Если аргумент responder
имеет значение null
, при успешном завершении операции отправляется событие result
, а при сбое — событие error
.
Этот метод может быть вызван только во время выполнения оператора. Если инструкция SQL представляет собой запрос SELECT
и задан аргумент prefetch
, значение которого больше нуля, инструкции будут выполняться до тех пор, пока не будет возвращен весь результирующий набор или не будет вызван метод SQLStatement.cancel()
или SQLConnection.cancel()
.
Параметры
prefetch:int (default = -1 ) — Когда в свойстве text задана инструкция SELECT , это значение обозначает количество строк, возвращаемых инструкцией за один раз. Значение по умолчанию равно -1. Это значит, что все строки результата будут возвращены инструкцией за один раз. При более быстром возврате результатов и разделении операций по их обработке приложение будет восприниматься пользователями как более производительное.
| |
responder:Responder (default = null ) — Объект, для которого определены методы, вызываемые при успешном выполнении или сбое операции. Если аргумент responder имеет значение null , по окончании выполнения отправляется событие result или error .
|
События
result: — Отправляется после успешного выполнения инструкции или в том случае, если указано значение аргумента prefetch и метод next() возвращает одну или несколько строк данных.
| |
error: — Отправляется после сбоя операции в асинхронном режиме выполнения.
|
Выдает
IllegalOperationError — Если метод вызывается, а оператор в текущий момент не выполняется (свойство executing имеет значение false ).
| |
SQLError — если произошел сбой операции в синхронном режиме выполнения.
|
Связанные элементы API
Пример ( Использование этого примера )
complete
объекта SQLResult и, если получены не все строки, вызывает метод next()
.
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"; var dbFile:File = new File(File.separator + "employee.db"); conn.open(dbFile); } function connOpenHandler(event:SQLEvent):void { dbStatement.addEventListener(SQLEvent.RESULT, resultHandler); dbStatement.addEventListener(SQLErrorEvent.ERROR, errorHandler); dbStatement.execute(10); } function resultHandler(event:SQLEvent):void { var result:SQLResult = dbStatement.getResult(); if (result != null) { var numRows:int = result.data.length; for (var i:int = 0; i < numRows; i++) { var row:Object = result.data[i]; trace("id:", row.id, ", name:", row.name, ", ssn:", row.ssn); } if (!result.complete) { dbStatement.next(10); } } } function errorHandler(event:SQLErrorEvent):void { trace("An error occured while executing the statement."); }
error | Событие |
flash.events.SQLErrorEvent
свойство SQLErrorEvent.type =
flash.events.SQLErrorEvent.ERROR
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Отправляется, если во время операции произошла ошибка.
КонстантаSQLErrorEvent.ERROR
определяет значение свойства type
события ошибки, отправляемого, когда вызов метода экземпляра SQLConnection или SQLStatement завершается ошибкой. Объект события error
имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
error | Объект SQLError, содержащий информацию о типе возникшей ошибки и о вызвавшей ее операции. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Объект SQLConnection или SQLStatement, сообщающий об ошибке. |
Связанные элементы API
result | Событие |
flash.events.SQLEvent
свойство SQLEvent.type =
flash.events.SQLEvent.RESULT
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0 |
Отправляется при успешном вызове метода execute()
или next()
. После того как было отправлено событие result
, для получения результатов выполнения инструкции можно вызвать метод getResult()
.
SQLEvent.RESULT
определяет значение свойства type
объекта события result
. Отправляется, когда успешно завершается выполнение метода SQLStatement.execute()
или SQLStatement.next()
После отправки события SQLEvent.RESULT
можно вызвать метод SQLStatement.getResult()
для просмотра результатов. Объект события result
имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Объект SQLStatement, выполнивший операцию. |
Связанные элементы API
Tue Jun 12 2018, 11:34 AM Z