惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
Vercel News
Vercel News
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
量子位
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)

博客园 - 剑廿三

AirExcel -用于导出 Excel 2007 文件的 Flex AIR 组件 初版发布 Flex SQLite Batch Insert Datas from Array Flex 遍历 ArrayCollection, Array Flex AIR SQLite Flex AIR: 使用透明 NativeWindow 窗体呈现 Line Chart 的一个 bug (Exception in CartesianChart/updateMultipleAxesStyles) Flex AIR:用 mx:Image 实现的动态图片按钮 Flex AIR:Line Chart 示例-从 XML 原始数据运算得出增长率图表 Flex AIR:Line Chart 示例-用 XML 画图表很简单 Flex: 抓取网页,通过 XML 获取部分内容 Flex: 通过 DataGrid 操作 XML 文件 PSP 使用 Web FTP (JSP, on EeeBox) 的两项设定 PS3 的 UserAgent PSP2000 的 UserAgent Windows Vista Ultimate 上基于 IE7 的 Maxthon 2.1.5 的 UserAgent OEM正版Windows Vista Home Premium上的 IE8 的 UserAgent EeeBox B202 上基于 Windows XP Pro SP2 的 IE7 的 UserAgent EeeBox B202上基于 Windows XP Pro SP2 IE7 的 Maxthon 2.1.5 的 UserAgent OEM正版Windows Vista Home Premium上的 Firefox 3.5.5 中文版的 UserAgent OEM正版Windows Vista Home Premium上基于IE8的 Maxthon 2.5.9 的 UserAgent
Flex SQLite: 一次执行多个SQL,查询两个表的数据,导入datagrid
剑廿三 · 2010-07-26 · via 博客园 - 剑廿三

<?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">
    
<fx:Declarations>
        
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
    
</fx:Declarations>
    
<fx:Script>
        
<![CDATA[
            
import mx.collections.ArrayCollection;
            
private var con:SQLConnection;
            
private var stmt:SQLStatement;
            
private var dbFile:File = File.documentsDirectory.resolvePath("MacroEconomicResearchData.sqlite.db");
            
            
/**
             * 打开文件选择对话框,选择 DB 文件
             
*/
            
protected function selectDBFile(root:File):void 
            { 
                
try
                { 
                    root.browseForSave(
"打开 DB 文件"); 
                    root.addEventListener(Event.SELECT, checkDBFileFormat);
                }
                
catch(error:Error)
                {
                    trace(
"打开失败:" + error.message);
                }
            } 
            
            
/**
             * 以字节流方式读取文件内容,检查文件是否 SQLite 格式
             
*/
            
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); 
            }
            
            
/**
             * 批量SQL集合的游标指针
             
*/
            
private var _execSQLCount:int = 0;
            
/**
             * 批量SQL集合数组,不能用 ArrayList
             
*/
            
private var _execSQLBatch:Array = new Array();
            
/**
             * 执行完毕全部SQL语句后要调用的函数(无参数)
             
*/
            
private var _execSQLCallLatency:Function;
            
            
/**
             * 批量执行SQL语句
             
*/
            
private function dbExecuteBatchSQL(evt:SQLEvent):void{
                
this._execSQLCount++;
                
                trace(
this._execSQLCount , this._execSQLBatch.length);
                
                
if(this._execSQLCount > this._execSQLBatch.length){
                    
                    
this._execSQLCount = 0;
                    
this.stmt.removeEventListener(SQLEvent.RESULT, dbExecuteBatchSQL);
                    
                    
if(this._execSQLCallLatency != null)
                    {
                        
this._execSQLCallLatency.call();
                        
//this._execSQLCallLatency = null;  DO NOT SET TO NULL, OR IT WILL NOT RUN
                    }
                }
else{
                    var sql:String 
= this._execSQLBatch[this._execSQLCount-1] as String;
                    trace(sql);
                    
this.stmt.text = sql;
                    
this.stmt.execute();
                }
            }
            
            
/**
             * 数据结构初始化,建立三个数据表
             
*/
            
private function dbInitStruct(evt:SQLEvent):void
            {
                
                
                
this._execSQLBatch = new Array();
                
this._execSQLBatch.push("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" +   
                    
");");
                
this._execSQLBatch.push("CREATE TABLE IF NOT EXISTS stockdailywatch (" +  
                    
"    ID INTEGER PRIMARY KEY AUTOINCREMENT, " +  
                    
"    Symbol VARCHAR(30)," +
                    
"    Name VARCHAR(30)" +
                    
");");
                
this._execSQLBatch.push("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" +   
                    
");");
                
                
                
this.stmt = new SQLStatement(); 
                
this.stmt.sqlConnection = con;
                
this.stmt.addEventListener(SQLErrorEvent.ERROR, dbErrorHandler); 
                
                
this.stmt.addEventListener(SQLEvent.RESULT, dbExecuteBatchSQL); 
                
                
this._execSQLCallLatency = this.dbInitData;
                
                
this.dbExecuteBatchSQL(null);
                
            }
            
            
/**
             * 数据初始化,插入两条记录
             
*/
            
private function dbInitData(event:SQLEvent=null):void 
            { 
                trace(
"SQLite 数据库初始化完成"); 
                
                
                stmt.addEventListener(SQLEvent.RESULT, dbExecuteBatchSQL);
                
                
this._execSQLBatch = new Array();
                
                
this._execSQLBatch.push("INSERT INTO stockdailywatch (Symbol,Name) VALUES ('1A0001','上证指数')");
                
this._execSQLBatch.push("INSERT INTO stockdaily (StatDate,Symbol,FinalPrice,RunDate) VALUES (date('2010-7-26'),'600066',16.00,date('now'))");
                
                
this._execSQLCallLatency = this.dbQueryData;
                
                
this.dbExecuteBatchSQL(null);
                
            }
            
            
/**
             * 从两个数据表中查询内容
             
*/
            
private function dbQueryData(event:SQLEvent=null):void
            {
                trace(
"SQLite 数据插入完成");
                
                
this.dbQueryONE();
                
this.dbQueryTWO();
                
            }
            
            
/**
             * 发起查询第一个数据表的内容
             
*/
            
private function dbQueryONE():void{
                var stmt:SQLStatement 
= new SQLStatement();
                stmt.sqlConnection 
= this.con;
                
                stmt.text 
= "SELECT Symbol,Name FROM stockdailywatch";
                stmt.execute(
-1new Responder(dbShowDataONE, dbErrorHandler));
            }
            
            
/**
             * 发起查询第二个数据表的内容
             
*/
            
private function dbQueryTWO():void{
                var stmt:SQLStatement 
= new SQLStatement();
                stmt.sqlConnection 
= this.con;
                
                stmt.text 
= "SELECT Symbol,FinalPrice,RunDate FROM stockdaily";
                stmt.execute(
-1new Responder(dbShowDataTWO, dbErrorHandler));
            }
            
/**
             * 获得第一个数据表的查询结果,导入 datagrid
             
*/
            
private function dbShowDataONE(result:SQLResult):void 
            { 
                trace(
"ONE 查询成功, 影响"+result.rowsAffected+"条记录");
                
                
                
if(result.data!=null )
                {
                    trace(
"ONE 得到"+result.data.length + "个结果");
                    var c:ArrayCollection 
= new ArrayCollection(result.data);
                    var numResults:
int =result.data.length;
                    
this.dgOne.dataProvider = c;
                }
                
            }
/**
             * 获得第二个数据表的查询结果,导入 datagrid
             
*/
            
private function dbShowDataTWO(result:SQLResult):void 
            { 
                trace(
"TWO 查询成功, 影响"+result.rowsAffected+"条记录");
                
                
                
if(result.data!=null )
                {
                    trace(
"TWO 得到"+result.data.length + "个结果");
                    var c:ArrayCollection 
= new ArrayCollection(result.data);
                    var numResults:
int =result.data.length;
                    
this.dgTwo.dataProvider = c;
                }
                
            }
            
/**
             * 按钮点击事件,触发以上全部过程
             
*/
            
protected function btnOK_clickHandler(event:MouseEvent):void
            {
                
this.selectDBFile(this.dbFile);
            }

        ]]

>
    
</fx:Script>
    
<s:Button x="210" y="10" label="按钮" id="btnOK" click="btnOK_clickHandler(event)"/>
    
<mx:DataGrid x="10" y="46" width="426" id="dgOne">
        
<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="10" y="210" width="426" id="dgTwo">
        
<mx:columns>
            
<mx:DataGridColumn headerText="RunDate" dataField="RunDate"/>
            
<mx:DataGridColumn headerText="Symbol" dataField="Symbol"/>
            
<mx:DataGridColumn headerText="FinalPrice" dataField="FinalPrice"/>
        
</mx:columns>
    
</mx:DataGrid>
    
    
</s:WindowedApplication>