zoukankan      html  css  js  c++  java
  • flex sqlite 操作blog 二进制数据

    1,              通常的操作方式:

    首先我们建立表:CREATE TABLE "pages" ("id" varchar, "data" blob),然后了使用sql 语句。

    sql = "SELECT id, CAST(data AS ByteArray) AS data FROM pages"

    flex 的代码如下:

    sql = "SELECT id, CAST(data AS ByteArray) AS data FROM pages"

     1 SQLConnection connection = new SQLConnection();
     2 var file:File = File.applicationDirectory.resolvePath("assetsdbdata.db");
     3 connection.open(file);
     4 
     5 var state:SQLStatement = new SQLStatement();
     6 state.text = sql;
     7 state.sqlConnection = connection
     8 state.execute();
     9 
    10 var result:SQLResult = state.getResult();
    11 var rows:int = result.data.length;
    12 for(var i:int =0; i < rows; i++) 
    13 {
    14     
    15     var row:Object = result.data[i];
    16     var data:ByteArray = row[data];
    17 }

    2,              特殊的处理方式:

    但是了,问题出现了,CAST(data AS ByteArray) AS data 这句,有时候,这个死活转不成bytearray,一直是0。这个问题困扰了我很久,我到adobe官网也查了半天,没有结果,最后找到sqlite 的 hex 函数。即改变sql 语句 SELECT id, hex(data) AS data FROM pages。

    Hex 函数,其实就是把sqlite blob 类型的数据转换为字符串,具体怎么转了,比如是:55ffab这样。 其实每个字符是4个字节, 那55 就表示一个Byte 了,即8字节。所以了,我写两个函数,用来转换hex 为bytearray。

    private function Hex2ByteArrayNew(hexStr:String):ByteArray
    {
        var ret:ByteArray = new ByteArray();
    
        var leng:int = hexStr.length;
        var newHexArrStr:String = "";
        var step:int = 2;
        var i:int = 0;
        
        while(i<leng)
        {
            try
            {
                //2 位一个byte
                var tempI:int = parseInt(hexStr.substr(i,step),16);
                
                ret.writeByte(tempI);
                
                i += step;
            }catch(e:Error)
            {
                trace(e);
            }
        }
        return ret;
    }

    3,              Bytearray 处理的一些技巧

    (1)       刚开始读取的时候,必须设置position = 0。

    (2)       readUnsignedByte, 以及  readDouble ,这些是读取固定字节,转换成相应的数据类型。一般使用这些方法来读取。

  • 相关阅读:
    SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached
    javascript 事件调用顺序
    Best Practices for Speeding Up Your Web Site
    C语言程序设计 使用VC6绿色版
    破解SQL Prompt 3.9的几步操作
    Master page Path (MasterPage 路径)
    几个小型数据库的比较
    CSS+DIV 完美实现垂直居中的方法
    由Response.Redirect引发的"Thread was being aborted. "异常的处理方法
    Adsutil.vbs 在脚本攻击中的妙用
  • 原文地址:https://www.cnblogs.com/csharponworking/p/3349598.html
Copyright © 2011-2022 走看看