直接帖代码
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:doug="com.dougmccune.containers.*" width="700" height="600">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
protected function cbLocal_changeHandler(event:Event):void
{
if(this.cbLocal.selected){
this.viewDataSource.selectedIndex = 1
}else{
this.viewDataSource.selectedIndex = 0;
}
}
import mx.controls.Alert;
private var con:SQLConnection;
private var stmt:SQLStatement;
private var dbFile:File = File.documentsDirectory.resolvePath("MacroEconomicResearchData.sqlite.db");
protected function btnOpen_clickHandler(event:MouseEvent):void
{
this.selectDBFile(this.dbFile);
}
protected function selectDBFile(root:File):void
{
try
{
root.browseForSave("打开 DB 文件");
root.addEventListener(Event.SELECT, checkDBFileFormat);
}
catch(error:Error)
{
trace("打开失败:" + error.message);
}
}
protected function checkDBFileFormat(event:Event):void
{
if(this.dbFile.exists)
{
var stream:FileStream = new FileStream();
stream.open(this.dbFile, FileMode.READ);
var s:String = stream.readUTFBytes(20);
if(s.substr(0,16) == "SQLite format 3"){
stream.close();
trace("db file format ok fit");
this.openDBFile();
}else{
stream.close();
trace("db file format not fit");
this.dbFile = File.documentsDirectory.resolvePath("MacroEconomicResearchData.sqlite.db");
}
}
else
{
trace("new file");
this.openDBFile();
}
}
private function openDBFile():void{
con = new SQLConnection();
con.addEventListener(SQLEvent.OPEN, dbInitStruct);
con.addEventListener(SQLErrorEvent.ERROR, dbErrorHandler);
con.openAsync(this.dbFile);
}
private function dbErrorHandler(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("error Details:", event.error.details);
}
private function dbInitStruct(evt:SQLEvent):void
{
stmt = new SQLStatement();
stmt.sqlConnection = con;
var sql:String =
/*
"CREATE TABLE IF NOT EXISTS stockdaily (" +
" ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" StatDate DATE," +
" Symbol VARCHAR(30)," +
" FinalPrice FLOAT," +
" HighPrice FLOAT," +
" LowPrice FLOAT," +
" DealVolume FLOAT," +
" DealMoney FLOAT," +
" RunDate DATETIME" +
");"+
*/
"CREATE TABLE IF NOT EXISTS stockdailywatch (" +
" ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" Symbol VARCHAR(30)," +
" Name VARCHAR(30)" +
");"
/*
+
"CREATE TABLE IF NOT EXISTS stockmarketdaily (" +
" ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" StatDate DATE," +
" SHDealMoney FLOAT(8,2)," +
" SZDealMoney FLOAT(8,2)," +
" SHDealMoneyComp FLOAT(6,2)," +
" SZDealMoneyComp FLOAT(6,2)," +
" SHAvgPE FLOAT(6,2)," +
" SZAvgPE FLOAT(6,2)," +
" SHAvgPB FLOAT(6,2)," +
" SZAvgPB FLOAT(6,2)," +
" SHAvgPrice FLOAT(7,2)," +
" SZAvgPrice FLOAT(7,2)," +
" RunDateTime DATETIME" +
");"
*/
stmt.text = sql;
stmt.addEventListener(SQLEvent.RESULT, dbInitData);
stmt.addEventListener(SQLErrorEvent.ERROR, dbErrorHandler);
stmt.execute();
}
private function dbInitData(event:SQLEvent):void
{
trace("SQLite 数据库初始化完成");
stmt.removeEventListener(SQLEvent.RESULT, dbInitData);
stmt.addEventListener(SQLEvent.RESULT, dbQueryData);
stmt.text = "INSERT INTO stockdailywatch (Symbol,Name) VALUES ('1A0001','上证指数')";
stmt.execute();
}
private function dbQueryData(event:SQLEvent):void
{
trace("SQLite 数据插入完成");
stmt.removeEventListener(SQLEvent.RESULT, dbQueryData);
stmt.text = "SELECT Symbol,Name FROM stockdailywatch";
stmt.execute(-1, new Responder(dbShowData, dbErrorHandler));
}
private function dbShowData(result:SQLResult):void
{
trace("查询成功"+result.rowsAffected);
if(result.data!=null )
{
trace(result.data.length + "个结果");
var c:ArrayCollection = new ArrayCollection(result.data);
var numResults:int =result.data.length;
this.dgStockWatch.dataProvider = c;
}
}
]]>
</fx:Script>
<mx:ViewStack x="27.8" y="32.4" id="viewDataSource" width="59" height="20">
<s:NavigatorContent label="local" width="100%" height="100%">
<s:Label>
remote
</s:Label>
</s:NavigatorContent>
<s:NavigatorContent label="remote" width="100%" height="100%">
<s:Label>
local
</s:Label>
</s:NavigatorContent>
</mx:ViewStack>
<s:CheckBox x="126" y="28" label="Local Data Source" id="cbLocal" click="cbLocal_changeHandler(event)"/>
<s:Button x="285" y="28" label="打开 SQLite 数据库文件" id="btnOpen" click="btnOpen_clickHandler(event)"/>
<mx:DataGrid x="27" y="79" width="643" height="145" id="dgStockDaily">
<mx:columns>
<mx:DataGridColumn headerText="列 1" dataField="col1"/>
<mx:DataGridColumn headerText="列 2" dataField="col2"/>
<mx:DataGridColumn headerText="列 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid x="27" y="246" width="643" id="dgStockWatch" editable="true">
<mx:columns>
<mx:DataGridColumn headerText="ID" dataField="ID"/>
<mx:DataGridColumn headerText="Symbol" dataField="Symbol"/>
<mx:DataGridColumn headerText="Name" dataField="Name"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid x="27" y="412" width="643" id="dgMarketDaily">
<mx:columns>
<mx:DataGridColumn headerText="列 1" dataField="col1"/>
<mx:DataGridColumn headerText="列 2" dataField="col2"/>
<mx:DataGridColumn headerText="列 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>
</s:WindowedApplication>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:doug="com.dougmccune.containers.*" width="700" height="600">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
protected function cbLocal_changeHandler(event:Event):void
{
if(this.cbLocal.selected){
this.viewDataSource.selectedIndex = 1
}else{
this.viewDataSource.selectedIndex = 0;
}
}
import mx.controls.Alert;
private var con:SQLConnection;
private var stmt:SQLStatement;
private var dbFile:File = File.documentsDirectory.resolvePath("MacroEconomicResearchData.sqlite.db");
protected function btnOpen_clickHandler(event:MouseEvent):void
{
this.selectDBFile(this.dbFile);
}
protected function selectDBFile(root:File):void
{
try
{
root.browseForSave("打开 DB 文件");
root.addEventListener(Event.SELECT, checkDBFileFormat);
}
catch(error:Error)
{
trace("打开失败:" + error.message);
}
}
protected function checkDBFileFormat(event:Event):void
{
if(this.dbFile.exists)
{
var stream:FileStream = new FileStream();
stream.open(this.dbFile, FileMode.READ);
var s:String = stream.readUTFBytes(20);
if(s.substr(0,16) == "SQLite format 3"){
stream.close();
trace("db file format ok fit");
this.openDBFile();
}else{
stream.close();
trace("db file format not fit");
this.dbFile = File.documentsDirectory.resolvePath("MacroEconomicResearchData.sqlite.db");
}
}
else
{
trace("new file");
this.openDBFile();
}
}
private function openDBFile():void{
con = new SQLConnection();
con.addEventListener(SQLEvent.OPEN, dbInitStruct);
con.addEventListener(SQLErrorEvent.ERROR, dbErrorHandler);
con.openAsync(this.dbFile);
}
private function dbErrorHandler(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("error Details:", event.error.details);
}
private function dbInitStruct(evt:SQLEvent):void
{
stmt = new SQLStatement();
stmt.sqlConnection = con;
var sql:String =
/*
"CREATE TABLE IF NOT EXISTS stockdaily (" +
" ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" StatDate DATE," +
" Symbol VARCHAR(30)," +
" FinalPrice FLOAT," +
" HighPrice FLOAT," +
" LowPrice FLOAT," +
" DealVolume FLOAT," +
" DealMoney FLOAT," +
" RunDate DATETIME" +
");"+
*/
"CREATE TABLE IF NOT EXISTS stockdailywatch (" +
" ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" Symbol VARCHAR(30)," +
" Name VARCHAR(30)" +
");"
/*
+
"CREATE TABLE IF NOT EXISTS stockmarketdaily (" +
" ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" StatDate DATE," +
" SHDealMoney FLOAT(8,2)," +
" SZDealMoney FLOAT(8,2)," +
" SHDealMoneyComp FLOAT(6,2)," +
" SZDealMoneyComp FLOAT(6,2)," +
" SHAvgPE FLOAT(6,2)," +
" SZAvgPE FLOAT(6,2)," +
" SHAvgPB FLOAT(6,2)," +
" SZAvgPB FLOAT(6,2)," +
" SHAvgPrice FLOAT(7,2)," +
" SZAvgPrice FLOAT(7,2)," +
" RunDateTime DATETIME" +
");"
*/
stmt.text = sql;
stmt.addEventListener(SQLEvent.RESULT, dbInitData);
stmt.addEventListener(SQLErrorEvent.ERROR, dbErrorHandler);
stmt.execute();
}
private function dbInitData(event:SQLEvent):void
{
trace("SQLite 数据库初始化完成");
stmt.removeEventListener(SQLEvent.RESULT, dbInitData);
stmt.addEventListener(SQLEvent.RESULT, dbQueryData);
stmt.text = "INSERT INTO stockdailywatch (Symbol,Name) VALUES ('1A0001','上证指数')";
stmt.execute();
}
private function dbQueryData(event:SQLEvent):void
{
trace("SQLite 数据插入完成");
stmt.removeEventListener(SQLEvent.RESULT, dbQueryData);
stmt.text = "SELECT Symbol,Name FROM stockdailywatch";
stmt.execute(-1, new Responder(dbShowData, dbErrorHandler));
}
private function dbShowData(result:SQLResult):void
{
trace("查询成功"+result.rowsAffected);
if(result.data!=null )
{
trace(result.data.length + "个结果");
var c:ArrayCollection = new ArrayCollection(result.data);
var numResults:int =result.data.length;
this.dgStockWatch.dataProvider = c;
}
}
]]>
</fx:Script>
<mx:ViewStack x="27.8" y="32.4" id="viewDataSource" width="59" height="20">
<s:NavigatorContent label="local" width="100%" height="100%">
<s:Label>
remote
</s:Label>
</s:NavigatorContent>
<s:NavigatorContent label="remote" width="100%" height="100%">
<s:Label>
local
</s:Label>
</s:NavigatorContent>
</mx:ViewStack>
<s:CheckBox x="126" y="28" label="Local Data Source" id="cbLocal" click="cbLocal_changeHandler(event)"/>
<s:Button x="285" y="28" label="打开 SQLite 数据库文件" id="btnOpen" click="btnOpen_clickHandler(event)"/>
<mx:DataGrid x="27" y="79" width="643" height="145" id="dgStockDaily">
<mx:columns>
<mx:DataGridColumn headerText="列 1" dataField="col1"/>
<mx:DataGridColumn headerText="列 2" dataField="col2"/>
<mx:DataGridColumn headerText="列 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid x="27" y="246" width="643" id="dgStockWatch" editable="true">
<mx:columns>
<mx:DataGridColumn headerText="ID" dataField="ID"/>
<mx:DataGridColumn headerText="Symbol" dataField="Symbol"/>
<mx:DataGridColumn headerText="Name" dataField="Name"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid x="27" y="412" width="643" id="dgMarketDaily">
<mx:columns>
<mx:DataGridColumn headerText="列 1" dataField="col1"/>
<mx:DataGridColumn headerText="列 2" dataField="col2"/>
<mx:DataGridColumn headerText="列 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>
</s:WindowedApplication>