日期:2014-05-16 浏览次数:20694 次
/**
* 说明:SQLite数据库连接类。
* 该类用于与数据库建立连接。
* 外部可通过调用该类的connect()方法来建立与指定路径的数据库(文件)的连接.
* 在调用connect与数据库建立连接时,如果成功建立(即成功打开数据库)会触发 SQLEvent.OPEN 事件
* 如果打开失败,将触发 SQLErrorEvent.ERROR 事件;
*/
package sunnyluo.sqlite
{
import flash.data.SQLConnection;
import flash.data.SQLMode;
import flash.events.EventDispatcher;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
[Event(name="open",type="flash.events.SQLEvent")]
[Event(name="error",type="flash.events.SQLErrorEvent")]
public class SQLiteConnection extends EventDispatcher
{
private var _conn : SQLConnection;
private var _connected : Boolean = false;;
private var _connecting:Boolean = false;
private var _path : String;
private var _dbFile:File;
/**
* 构造函数.
*
*/
public function SQLiteConnection(path : String)
{
_path = path;_conn = new SQLConnection();
_connected = false;
}
/**
* 与指定路径的数据库文件建立连接.
*
*/
public function connect():void
{
if(!_conn)
{
_conn = new SQLConnection();
_connected = false;
}
if(_connected){
this.dispatchEvent(new SQLEvent(SQLEvent.OPEN));
return;
}
if(_connecting)
{
return;
}
_connecting = true;
addHandler();
try{
//_dbFile?"":_dbFile=new File(_path).resolvePath(_path);
_dbFile =new File(_path);
//如果数据库文件不存在,就先创建
if(! _dbFile.exists)
{
var fs:FileStream = new FileStream();
fs=new FileStream();
fs.open(_dbFile,FileMode.APPEND);
fs.close();
}
_conn.openAsync(_dbFile, SQLMode.CREATE);
}catch(e:Error)
{
trace(e.message, _path);
}
}
/**
* 添加数据库连接事件侦听函数;
*
*/
private function addHandler():void
{
if(_conn)
{
_conn.addEventListener(SQLEvent.OPEN, sqlOpenHandler);
_conn.addEventListener(SQLErrorEvent.ERROR, openErrorHandler);
}
}
/**
* 移除数据库连接事件侦听函数;
*
*/
private function removeHandler():void
{
if(_conn)
{
_conn.removeEventListener(SQLEvent.OPEN, sqlOpenHandler);
_conn.removeEventListener(SQLErrorEvent.ERROR, openErrorHandler);
}
}
/**
* 成功打开数据库的事件处理函数;
* @param event
*
*/
private function sqlOpenHandler(event : SQLEvent):void
{
_connected = true;
_connecting = false;
removeHandler();
this.dispatchEvent(event);
}
/**
* 打开数据库失败的事件处理函数.
* @param event
*
*/
private function openErrorHandler(event : SQLErrorEvent):void
{
_connected = false;
_connecting = false;
removeHandler();
this.dispatchEvent(event);
}
/**
* 是否已经建立了连接.
* @return
*
*/
public function isConnected() : Boolean
{
return _connected;
}
/**
* 获得 SQLConnection 对象
* @return
*
*/
public function getConn():SQLConnection
{
return _conn ? _conn : new SQLConnection();
}
/**
*关闭数据库
*
*/
public function close():void
{
if(_conn)
{
_conn.close();
_conn=null;
}
if(_dbFile){
_dbFile.cancel();
_dbFile=null;
}
_connected = false;
_connecting = false;
}
}
}/**
* 说明:SQLite数据库操作类.
* 该类是所有数据库操作的基类,如