最近想写一个小软件,需要用到数据库,但是不想用XML,也不想用MSSQL以及Mysql之类的需要安装的数据库,听闻AIR可以直接操作SQLite的数据库,于是搜集研究之,张贴结果于下:
SQLite是一个关系型数据库,无需安装。
下面的代码中所有"""字符均为半角双引号,改原因由代码高亮插件造成,复制代码的时候注意替换。
//导入显示控件
import fl.controls.dataGridClasses.DataGridColumn;
import fl.events.DataGridEvent;
import fl.data.DataProvider;
//导入SQL相关类包
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.data.SQLResult;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
//创建一个连接对象
var conn:SQLConnection = new SQLConnection();
var sqlStatement:SQLStatement = new SQLStatement();
sqlStatement.sqlConnection = conn;
conn.addEventListener(SQLEvent.OPEN, openHandler);
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
sqlStatement.addEventListener(SQLEvent.RESULT, sqlStatementResultHander);
sqlStatement.addEventListener(SQLErrorEvent.ERROR, sqlStatementErrorHander);
//声明一个数据库对象,如果存在,则读取数据库,不存在则自动创建数据库
var dbFile:File = File.applicationDirectory.resolvePath("datas.db");
//打开数据库
conn.open(dbFile);
//创建一张表
var sql:String =
"CREATE TABLE IF NOT EXISTS timeManager (" +
" id INTEGER PRIMARY KEY AUTOINCREMENT, " +
" time TEXT, " +
" things TEXT, " +
" salary NUMERIC CHECK (salary > 0)" +
")";
sqlStatement.text = sql;
sqlStatement.addEventListener(SQLEvent.RESULT, createResult);
sqlStatement.addEventListener(SQLErrorEvent.ERROR, createError);
sqlStatement.execute();
function createResult(event:SQLEvent):void
{
trace("Table created");
}
function createError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
//插入数据到刚刚建立的表
sql="INSERT INTO timeManager(time,things) VALUES ('2010-3-21','打篮球')";
sqlStatement.text = sql;
sqlStatement.execute();
//查询数据库
sql ="select * from timeManager";
sqlStatement.text = sql;
sqlStatement.execute();
//关闭连接
conn.close();
function openHandler(event:SQLEvent):void {
trace("the database was opened successfully");
}
function errorHandler(event:SQLErrorEvent):void {
trace("Details:", event.error.message);
}
//处理查询的返回结果添加到显示区域
function sqlStatementResultHander(event:SQLEvent):void {
var re:SQLResult=event.target.getResult();
var aDP_array:Array = new Array();
if (re.data!=null) {
for (var i:int = 0; i < re.data.length; i++) {
aDP_array.push({id:re.data[i]["id"], Time:re.data[i]["time"],Thing:re.data[i]["things"]});
}
my_dg.dataProvider = new DataProvider(aDP_array);
}
}
function sqlStatementErrorHander(event:SQLErrorEvent):void {
trace(event.error.message);
}
my_dg.width=200;
注:在测试上面的代码的时候,你需要先在Flash中拖入一个DataGrid组件到舞台,命名为my_dg。本实例代码部分来源网络。
另外网上的AIR开发资料较少,但是可以获取官方的开发文档,很详细,地址:http://www.adobe.com/support/documentation/cn/air/