系列文章导航

  1. Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表)
  2. Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
  3. Adobe AIR中使用Flex连接Sqlite数据库(3)(查询)
  4. Adobe AIR中使用Flex连接Sqlite数据库(4)(事务)
  5. Flex,Fms3相关文章索引
  6. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
  7. 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))

本章主要总结关系数据库引擎(sqlite),同步和异步执行模式,创建数据库和表

Adobe AIR 包括一个基于 SQL 的关系数据库引擎(sqlite),该引擎在运行时中运行,数据以本地方式存储在运行 AIR 应用程序的计算机上的数据库文件中(例如,在计算机的硬盘驱动器上)。由于数据库的运行和数据文件的存储都在本地进行,因此,不管网络连接是否可用,AIR 应用程序都可以使用数据库。
单个 Adobe AIR 本地 SQL 数据库作为单个文件存储在计算机的文件系统中。运行时包括 SQL 数据库引擎,该引擎管理数据库文件的创建和结构化以及操作和检索数据库文件中的数据。运行时不指定在文件系统上存储数据库数据的方式或位置;相反,每个数据库完全存储在单个文件中。您指定在文件系统中存储数据库文件的位置。单个 AIR 应用程序可以访问一个或多个单独的数据库(即单独的数据库文件)。由于运行时将每个数据库作为单个文件存储在文件系统上,因此可以在需要时按照应用程序的设计和操作系统的文件访问约束查找您的数据库。每个用户都可以具有其特定数据的单独数据库文件,或者数据库文件可以由在单个计算机上共享数据的所有应用程序用户访问。由于数据对单个计算机是本地的,因此在不同计算机上的用户之间并不自动共享数据。本地 SQL 数据库引擎未提供对远程数据库或基于服务器的数据库执行 SQL 语句的任何功能。

关于sqlite
关于SQLite的特性:
1. ACID事务 
2. 零配置 – 无需安装和管理配置 
3. 储存在单一磁盘文件中的一个完整的数据库 
4. 数据库文件可以在不同字节顺序的机器间自由的共享 
5. 支持数据库大小至2TB 
6. 足够小, 大致3万行C代码, 250K 
7. 比一些流行的数据库在大部分普通数据库操作要快 
8. 简单, 轻松的API 
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定 
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率 
11. 独立: 没有额外依赖 
12. Source完全的Open, 你可以用于任何用途, 包括出售它 
13. 支持多种开发语言,C, PHP, Perl, Java, ASP.NET,Python

更详细情况可以参考以下站点:
http://www.sqlite.org/
http://www.sqlite.com.cn/

本地 SQL 数据库的用途
AIR 本地 SQL 数据库功能可以用于将应用程序数据存储在用户的本地计算机上的任何目的。Adobe AIR 包括在本地存储数据的几种机制,各机制具有不同的优点。以下是本地 SQL 数据库在 AIR 应用程序中的一些可能用途:
1.对于面向数据的应用程序(例如通讯簿),数据库可以用于存储主应用程序数据。
2.对于面向文档的应用程序(用户创建要保存并可能共享的文档),可以在用户指定的位置将每个文档另存为数据库文件。(但是,请注意,任何 AIR 应用程序都能够打开数据库文件,因此对于潜在敏感的文档,建议使用单独的加密机制。)
3.对于支持网络的应用程序,数据库可以用于存储应用程序数据的本地缓存,或者在网络连接不可用时暂时存储数据。可以创建一种将本地数据库与网络数据存储同步的机制。
4.对于任何应用程序,数据库都可以用于存储单个用户的应用程序设置,例如用户选项或应用程序信息(如窗口大小和位置)。

关于同步和异步执行模式
1.编写代码以处理本地 SQL 数据库时,会指定以两种执行模式之一执行数据库操作:异步或同步执行模式。通常,代码示例说明如何以这两种方式执行每个操作,以便您可以使用最适合您需求的示例。
2.在异步执行模式中,为运行时提供一个指令,运行时将在请求的操作完成或失败时调度事件。首先,通知数据库引擎执行操作。在应用程序继续运行的同时,数据库引擎在后台工作。最后,完成操作时(或者它失败时),数据库引擎调度事件。由事件触发的代码执行后续操作。此方法具有一个重要的优点:运行时在后台执行数据库操作,同时主应用程序代码继续执行。如果数据库操作花费大量的时间,则应用程序继续运行。最重要的是,用户可以继续与其交互,而屏幕不会冻结。但是,与其它代码相比,编写异步操作代码可能更加复杂。在必须将多个相关的操作分配给各个事件侦听器方法的情况下,通常会出现此复杂性。
3.从概念上说,将操作作为单个步骤序列(一组同步操作,而不是分到几个事件侦听器方法中的一组操作)进行编码更为简单。除了异步数据库操作外,Adobe AIR 还允许您同步执行数据库操作。在同步执行模式中,操作不在后台运行。相反,它们以与所有其它应用程序代码相同的执行序列运行。通知数据库引擎执行操作。然后,代码在数据库引擎工作时暂停。完成操作后,继续执行下一行代码。
4.异步还是同步执行操作是在 SQLConnection 级别上设置的。使用单个数据库连接,无法同步执行某些操作或语句,同时异步执行其它操作或语句。通过调用 SQLConnection 方法打开数据库,可以指定 SQLConnection 是在同步还是异步执行模式下操作。如果调用 SQLConnection.open(),则连接在同步执行模式下操作;如果调用 SQLConnection.openAsync(),则连接在异步执行模式下操作。使用 open() 或 openAsync() 将 SQLConnection 实例连接到数据库后,除非先关闭再重新打开到数据库的连接,否则该实例将固定为同步或异步执行模式。

创建数据库
若要创建数据库文件,请首先创建 SQLConnection 实例。调用其 open() 方法在同步执行模式下打开它,或者调用其 openAsync() 方法在异步执行模式下打开它。open() 和 openAsync() 方法用于打开到数据库的连接。如果传递的 File 实例引用 reference 参数(第一个参数)的不存在的文件位置,则 open() 或 openAsync() 方法将在该文件位置创建一个数据库文件,并打开到新创建的数据库的连接。
不管是调用 open() 方法还是 openAsync() 方法创建数据库,数据库文件的名称都可以是具有任何文件扩展名的任何有效文件名。如果调用 reference 参数为 null 的 open() 或 openAsync() 方法,则将创建新的内存中数据库,而不是在磁盘上创建数据库文件。

以下代码清单说明使用异步执行模式创建数据库文件(新数据库)的过程,数据库文件保存在应用程序的存储目录中,其文件名为“myTestdb.db”:
import mx.controls.Alert;

private var con:SQLConnection;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 //在 openAsync() 方法调用操作成功完成时调度
 con.addEventListener(SQLEvent.OPEN,openHandler);
 //SQLConnection 对象的异步操作导致错误时调度
 con.addEventListener(SQLErrorEvent.ERROR,errorHandler);
 
 con.openAsync(file);
}

private function openHandler(evt:SQLEvent):void
{
 Alert.show("成功完成");
}

private function errorHandler(evt:SQLErrorEvent):void
{
 Alert.show("失败");
 Alert.show(evt.error.message);
 Alert.show(evt.error.details);
}

要同步执行操作,请在使用 SQLConnection 实例打开数据库连接时,调用 open() 方法。以下代码说明如何创建和打开同步执行其操作的 SQLConnection 实例:
import mx.controls.Alert;

private var con:SQLConnection;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 
 try
 {
  con.open(file);
  Alert.show("成功完成");
 }
 catch(error:SQLError)
 {
  Alert.show(error.message);
  Alert.show(error.details);
 }
}

创建数据库表
以下使用异步执行模式在现有数据库文件中创建一个名为“emp”的表。
import mx.controls.Alert;

private var con:SQLConnection;
private var createStmt:SQLStatement;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 //在 openAsync() 方法调用操作成功完成时调度
 con.addEventListener(SQLEvent.OPEN,openHandler);
 //SQLConnection 对象的异步操作导致错误时调度
 con.addEventListener(SQLErrorEvent.ERROR,errorHandler);
 
 con.openAsync(file);
}

private function createResult(event:SQLEvent):void 

    Alert.show("表创建"); 
}

private function createError(event:SQLErrorEvent):void 

    Alert.show("Error message:", event.error.message); 
    Alert.show("Details:", event.error.details); 
}

private function openHandler(evt:SQLEvent):void
{
 Alert.show("成功完成");
 
 createStmt = new SQLStatement(); 
 createStmt.sqlConnection = con; 
 var sql:String =  
    "CREATE TABLE IF NOT EXISTS emp (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
    
 createStmt.text = sql;
 createStmt.addEventListener(SQLEvent.RESULT, createResult); 
 createStmt.addEventListener(SQLErrorEvent.ERROR, createError); 
 createStmt.execute();  
}

private function errorHandler(evt:SQLErrorEvent):void
{
 Alert.show("失败");
 Alert.show(evt.error.message);
 Alert.show(evt.error.details);
}

以下代码使用同步执行模式在现有数据库文件中创建一个名为“emp”的表
import mx.controls.Alert;

private var con:SQLConnection;
private var createStmt:SQLStatement;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 createStmt = new SQLStatement();
 
 try
 {
  con.open(file);
  
   
  createStmt.sqlConnection = con; 
  var sql:String =  
     "CREATE TABLE IF NOT EXISTS emp (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
    
 createStmt.text = sql;
 createStmt.execute();  
 
  Alert.show("成功完成");
 }
 catch(error:SQLError)
 {
  Alert.show(error.message);
  Alert.show(error.details);
 }
}

代码下载:
http://files.cnblogs.com/aierong/Air_Test_SQLite.rar

Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)的更多相关文章

  1. Adobe AIR 中为不同尺寸和分辨率屏幕适配

    在 Adobe AIR 中为不同屏幕尺寸的多种设备提供支持 http://www.adobe.com/cn/devnet/air/articles/multiple-screen-sizes.html ...

  2. [AIR] 在 Adobe AIR 中为不同屏幕尺寸的多种设备提供支持

    转自:http://www.adobe.com/cn/devnet/air/articles/multiple-screen-sizes.html 无论是改编原本在浏览器 Flash Player 中 ...

  3. windows平台使用MongoDB shell 来连接 MongoDB 服务器并创建数据库

    windows平台使用MongoDB shell 来连接 MongoDB 服务器并创建数据库 命令行进入MongoDB的bin目录运行mongod.exe mongod --dbpath c:\dat ...

  4. android sqlite 一次创建多个表

    package com.yangguangfu.database; import android.content.Context; import android.database.sqlite.SQL ...

  5. input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has

    input屏蔽历史记录   设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处   ;(function($){$.ex ...

  6. 创建数据库,创建数据库表,例子。MySQL语句

    1.创建数据库:    创建的代码:create  数据库的代码:database   数据库表名:随便起,只要自己记住就行.test create database test; 2.删除数据库: 删 ...

  7. mysql 命令行查看数据库、创建数据库、选择数据库、删除数据库

    mysql数据库命名规则(标识符规则): 不能和已存在的命名重名: 由大小写字母.数据.下划线.@.# 和 $ 符号组成: 首字母不能是数字和$符. 不允许有空格和特殊字符. 不允许是mysql的保留 ...

  8. Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)

    这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战. 第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是 ...

  9. Adobe AIR and Flex - 保存序列化对象文件(译)

    创建任何桌面应用程序几乎总是需要在本地存储数据,通过Adobe AIR我们有几下面几个选择,一个是我们能够使用内置的 SQLite 数据库支持,对于少量的数据这是大材小用了.另外一个选择是我们通过把数 ...

随机推荐

  1. Python 数据类型:元组

    一.元组介绍 1. 元组可以存储一系列的值,使用括号来定义,每个元素之间用逗号隔开,形如 ('a', 'b', 'c', 'd')2. 元组一旦定义,元组内的元素就不能再修改,除非重新定义一个新的元组 ...

  2. iPhone较为基础的代码片段

    Iphone代码片段导航 1.给UITableViewController添加ToolBar. self.navigationController.toolbarHidden = NO; //默认是隐 ...

  3. PyQt4日历部件QXalendarWidget

    QCalendarWidget类提供了以月为单位地日历部件.该部件允许用户以一种简单而直接的方式选择日期. #!/usr/bin/python # -*- coding: utf-8 -*- impo ...

  4. Ubuntu adb devices :???????????? no permissions (verify udev rules) 解决方法

    Ubuntu adb devices :???????????? no permissions (verify udev rules) 解决方法http://www.cnblogs.com/cat-l ...

  5. 在Linux中的.iso文件的处理方法

    1,mkdir /a 2,mount MLNX_OFED_LINUX-4.4-2.0.7.0-rhel7.3-x86_64.iso  /a3,cd /a4,这样就可以对文件进行操作了

  6. iOS tableview上放textfield

    用UITableViewController就可以了,处理键盘弹出和消失的代码已经封装在UITableViewController里了.

  7. interface Impl

    public interface ActionBarOperations { void initSthOne(); void initSthTwo(); } public class ActionBa ...

  8. 模拟退火算法(西安网选赛hdu5017)

    Ellipsoid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  9. Centos6.8 防火墙设置

    1.指令 vi /etc/sysconfig/iptables 添加以下内容和要开放的端口 # Firewall configuration written by system-config-fire ...

  10. Composer 添加 Laravel-china 的国内源

    不知道由于什么原因,原来的 Composer 的国内镜像 https://pkg.phpcomposer.com/ 不能正常使用,经常连不上. 找了半天,发现还有一个 laravel-china 的国 ...