火星文 技术研习社

Noname Cat, Keep Thinking
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Flex AIR SQLite

Posted on 2010-07-22 07:37  剑廿三  阅读(508)  评论(0编辑  收藏  举报

直接帖代码

 

 

<?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(
-1new 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>