最近做个桌面的小应用,想要使用air的本地数据库功能,保存用户的历史操作信息和数据,其实就是保存用户已经打开过的文件。对用户的操作信息的保存,的确是很有用的,日后可以以此进行分析,总结用户习惯,设计更加友好的程序,更符合用户自然人操作行为的界面。另外本地数据库的使用也可以保存程序的状态,比如用户的个性化设置,用户偏好。
我想把用户打开文件的历史记录写进本地数据库里,以后点开打开记录时查询数据库。软件安装后第一次打开使用时,会创建数据库,以后再打开软件会先查看数据库是否存在,如果存在,则查询数据库,读取记录;如果不存在或者被删掉了,则新建数据库。
首先说一下AS3提供的关于数据库的API: SQLConnection, SQLStatement,SQLResult,File, SQL查询时的事件有SQLEvent.RESULT, SQLEvent.OPEN, SQLErrorEvent.ERROR.
第一步打开数据库连接。
var conn:SQLConnection = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, connOpenHandler);
var dbFile:File = new File(“……..”);//本地数据库文件的地址。通常会放在应用程序的安装目录里。
conn.open(dbFile);
//定义打开处理函数;
private function connOpenHandler(evt:SQLEvent):void{
//….
}
第二步新建数据库查询对象,并与数据库连接关联。
var dbStatement:SQLStatement = new SQLStatement();
dbStatement.sqlConnection = conn;
在确定数据库连接打开的状态下,可以进行数据库查询了。
//假设保存已打开文件信息的表是 “fileOpenedDB”,该表保存了文件名,文件地址,浏览次数。
Var sqltxt:String=”SELECT fileName, fileUrl FROM fileOpenedDB”;
dbStatement.sql=sqltxt;
dbStatement.addEventListener(air.SQLEvent.RESULT, resultHandler);
dbStatement.addEventListener(air.SQLErrorEvent.ERROR, errorHandler);
实现查询结果侦听
Private function resultHandler(evt)
{
var result = (evt.target as SQLStatement).getResult();
if (result != null)
{
var numRows = result.data.length;
for (var i:int = 0; i < numRows; i++)
{
//处理查询结果
var row = result.data[i];
//…..
}
}
}
Private function errorHandler(event)
{
trace("An error occured while executing the statement.");
}
基本上就是这种用法,创建数据表也是一样的,只是把SQLStatement的查询语句改掉就行。
AIR的本地数据库查询支持同步和异步两种执行模式。对于数据量比较大的查询应该保用异步方式,毕竟快速响应对于用户来说是很重要的。
网络上有很多相关的文章,有兴趣的可以自己去搜搜。