守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 811|回复: 1

[SQLite] Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语...

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51696
    钢镚
    1422

    开源英雄守望者

    发表于 2015-6-12 16:49:03 | 显示全部楼层 |阅读模式
    Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)

    本章主要总结数据库的插入,删除,修改,以及语句参数的使用
    本章提到的同步和异步操作,不明白的可以看上篇文章
    http://www.cnblogs.com/aierong/archive/2009/01/22/flex_Sqlite_1.html


    0.SQLStatement类介绍
    SQLStatement实例用于针对通过 SQLConnection 实例打开的本地 SQL 数据库执行 SQL 语句。
    SQLStatement实例通过将 SQLConnection 实例设置为 SQLStatement 实例的 sqlConnection 属性的值来链接到 SQLConnection 实例。text 属性用要执行的 SQL 语句的实际文本进行填充。如有必要,可以使用 parameters 属性指定 SQL 语句参数的值,并通过调用 execute() 方法执行该语句。


    1.插入数据
    同步版本:

    1. import mx.controls.Alert;
    2. private var con:SQLConnection;

    3. private function initApp():void
    4. {
    5. var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")

    6. con = new SQLConnection();
    7. var stmt:SQLStatement = new SQLStatement();

    8. try
    9. {
    10.   con.open(file);
    11.   
    12.   stmt.sqlConnection = con;
    13.   stmt.text="INSERT INTO emp (firstName, lastName, salary) VALUES ('f', 'l', 88)";
    14.   stmt.execute();
    15. }
    16. catch(error:SQLError)
    17. {
    18.   Alert.show(error.message);
    19.   Alert.show(error.details);
    20. }
    21. }
    复制代码

    代码说明:
    SQLStatement类的实例用于针对通过 SQLConnection 实例打开的本地 SQL 数据库执行 SQL 语句


    2.得到已插入行的数据库生成的行标识
    得到自动增长列的行标识数值

    1. var stmt:SQLStatement = new SQLStatement();
    2. stmt.sqlConnection = con;
    3. stmt.text="INSERT INTO emp (firstName, lastName, salary) VALUES ('f', 'l', 88)";
    4. stmt.execute();

    5. var result:SQLResult = stmt.getResult();
    6. var primaryKey:Number = result.lastInsertRowID;
    7.    
    8. Alert.show(primaryKey.toString());
    复制代码

    代码说明:
    SQLResult 类提供对为响应 SQL 语句(SQLStatement 实例)执行而返回的数据的访问
    lastInsertRowID属性:上次生成的行标识符(由 SQL INSERT 语句生成),如果执行的语句不是 INSERT 语句,则该值为 0。


    3.语句参数的使用
    在多次使用一个 SQL 语句但该语句中的值不同的情况下,最佳方法是使用包括参数的 SQL 语句而不是在 SQL 文本中包括字面值。参数是语句文本中的一个占位符,每次执行语句时都将它替换为实际的值。
    参数名称由“:”或“@”字符后跟一个名称组成,例如::itemName  @firstName
    还可以使用未命名参数,使用“?”字符表示 SQL 语句中的参数。按照参数在语句中的顺序,每个参数都分配有一个数字索引,数字索引从索引 0(表示第一个参数)开始。

    使用参数的优点:
    1.性能更佳
    2.显式数据类型指定
    3.安全性更高

    实例代码:得到自动增长列的行标识数值(异步版本)

    1. private var stmt1:SQLStatement;
    2. private function GetlastInsertRowID():void
    3. {
    4. stmt1 = new SQLStatement();
    5. stmt1.sqlConnection = con;

    6. stmt1.text="INSERT INTO emp (firstName, lastName, salary) VALUES (@firstName, @lastName, @salary)";
    7. stmt1.parameters["@firstName"]="f";
    8. stmt1.parameters["@lastName"]="l";
    9. stmt1.parameters["@salary"]=88;  

    10. stmt1.addEventListener(SQLEvent.RESULT,okHandler);
    11. stmt1.addEventListener(SQLErrorEvent.ERROR,errorHandler);
    12. stmt1.execute();
    13. }

    14. private function okHandler(evt:SQLEvent):void
    15. {
    16. Alert.show("插入成功");
    17. var re:SQLResult= this.stmt1.getResult();
    18. var id:Number=re.lastInsertRowID;
    19. Alert.show(id.toString());
    20. }

    21. private function errorHandler(evt:SQLErrorEvent):void
    22. {
    23. Alert.show("失败");
    24. Alert.show(evt.error.message);
    25. Alert.show(evt.error.details);
    26. }
    复制代码

    代码说明:
    此例题中用到了语句参数@firstName, @lastName, @salary,并分别赋值
    要是使用未命名参数,把代码修改如下即可(注意数字索引从0开始):

    1. stmt1.text="INSERT INTO emp (firstName, lastName, salary) VALUES (?, ?, ?)";
    2. stmt1.parameters[0]="f";
    3. stmt1.parameters[1]="l";
    4. stmt1.parameters[2]=88;
    复制代码


    4.删除操作

    1. private function del():void
    2. {
    3. var stmt:SQLStatement = new SQLStatement();
    4. stmt.sqlConnection = con;
    5. stmt.text="delete from emp where salary=:salary";
    6. stmt.parameters[":salary"]=88;
    7. stmt.execute();

    8. var result:SQLResult = stmt.getResult();
    9.     var count:Number = result.rowsAffected;
    10.    
    11.     Alert.show("成功删除"+count.toString()+"行");
    12. }
    复制代码

    代码说明:
    rowsAffected属性:指示受此操作影响的行数
    请注意,当相关的 SQL 操作为不带 WHERE 子句的 DELETE 语句时(即该语句删除表中的所有行),rowsAffected 属性始终为 0,而不管删除了多少行。如果您需要知道删除的行数,则可以包括 WHERE 子句 WHERE 1 = 1,在这种情况下,将删除所有行,并且 rowsAffected 属性会精确反映已删除的行数


    5.修改操作

    1. private function updateData():void
    2. {
    3. var stmt:SQLStatement = new SQLStatement();
    4. stmt.sqlConnection = con;
    5. stmt.text="update emp set lastName=:lastName where salary=:salary";
    6. stmt.parameters[":lastName"]="la";
    7. stmt.parameters[":salary"]=88;
    8. stmt.execute();

    9. var result:SQLResult = stmt.getResult();
    10.     var count:Number = result.rowsAffected;
    11.    
    12.     Alert.show("成功修改"+count.toString()+"行");
    13. }
    复制代码

    代码说明:
    把salary=88的lastName修改为"la"


    6.代码下载
    http://files.cnblogs.com/aierong/Air_Test_SQLite2.rar




    本文来自:http://www.cnblogs.com/aierong/archive/2009/01/22/flex_Sqlite_Add_Delete_Update.html



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51696
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2015-6-12 17:01:01 | 显示全部楼层
    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-8-25 17:12 , Processed in 0.040800 second(s), 33 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表