zoukankan      html  css  js  c++  java
  • flex Air操作sqllite数据库,Blob数据问题

      闲来整理了下之前使用sqllite的代码,创建表,创建连接,增删改查。基础类型的操作都很简单。

    flex官方提供文档很完善了,参见http://help.adobe.com/zh_CN/as3/dev/WSd47bd22bdd97276f1365b8c112629d7c47c-8000.html#WSd47bd22bdd97276f-322c934e1262ad0c455-8000

      关于Blob文件读取的问题说明下,Adobe默认存储的Blob编码方式是AMF格式的,所以直接读取使用其他语言比如java、c++等存储的大数据格式作为资源将获得错误的结果,因此读取的时候需参考CAST语法,官方说法如下:

    同样使用java等语言读取as存储的数据也会获得错误。具体区别貌似是aodbe在二进制文件的首段存储了4位的标签内容( AMF 格式),因此在使用java等语言读取as写入的信息后需扔弃前四位存储的信息。下面是一个将as存储的图片二进制使用java读取的范例,如果不截取前4位信息,那么直接保存的png图片将不被识别

     1 public class SQLListeTest {
     2 
     3     public static void main(String args[]){
     4         
     5         String databaseName = "C:/Documents and Settings/HANSHAOJIE/桌面/db.sqllite";
     6         try{
     7             Class.forName("org.sqlite.JDBC");
     8             Connection conn = DriverManager.getConnection("jdbc:sqlite:/"
     9                       + databaseName);
    10 
    11             Statement stat = conn.createStatement();
    12             String sql = "SELECT * FROM testTable where id = '15'";
    13             ResultSet rs = stat.executeQuery(sql);
    14             if(rs.next()){
    15 
    16                 String s = rs.getString("id");
    17                 System.out.println(s);
    18                 byte[] by = rs.getBytes("imageData");
    19                 
    20                 for (int i = 0; i < by.length; i++){
    21                     byte b = by[i];
    22                     System.out.print((char)b);
    23                 }
    24                 
    25                 //创建一个新文件来存储读取的图片二进制信息
    26                 File f = new File("C:/Documents and Settings/HANSHAOJIE/桌面/test.png");
    27                 f.createNewFile();
    28                 FileOutputStream fou = new FileOutputStream(f);
    29                 for (int i = 4; i < by.length; i++) {
    30                     int j = by[i];
    31                     fou.write(by[i]);
    32                 }
    33                 fou.flush();
    34                 fou.close();
    35             }        
    36         }
    37         catch(Exception ex){
    38             ex.printStackTrace();
    39         }
    40     }
    41 }
  • 相关阅读:
    我的canvasnode v0.1完成了
    我们的scrum实践
    好文转贴(6)——代码永远是罪魁祸首吗?
    关于“产品驱动”和“技术驱动”
    居然获“最受读者喜爱的IT图书作译者奖”了
    重写代码 多重登录
    图片验证码接口
    syl/settings.py中配置注册 权限认证
    码云 上传与克隆
    短信验证接口
  • 原文地址:https://www.cnblogs.com/xignzou/p/2981736.html
Copyright © 2011-2022 走看看