本博推荐文章快速导航: Sql Server2005 Transact-SQL 新兵器学习 MCAD学习 代码阅读总结 ASP.NET状态管理 DB(数据库) WAP WinForm Flex,Fms

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

系列文章导航
  1. Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表)
  2. Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
  3. Adobe AIR中使用Flex连接Sqlite数据库(3)(查询)
  4. Adobe AIR中使用Flex连接Sqlite数据库(4)(事务)
  5. Flex,Fms3相关文章索引
  6. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
  7. 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))


本章主要总结数据库的插入,删除,修改,以及语句参数的使用
本章提到的同步和异步操作,不明白的可以看上篇文章
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.插入数据
同步版本:
import mx.controls.Alert;
private var con:SQLConnection;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 var stmt:SQLStatement = new SQLStatement();
 
 try
 {
  con.open(file);
  
  stmt.sqlConnection = con;
  stmt.text="INSERT INTO emp (firstName, lastName, salary) VALUES ('f', 'l', 88)";
  stmt.execute();
 }
 catch(error:SQLError)
 {
  Alert.show(error.message);
  Alert.show(error.details);
 }
}
代码说明:
SQLStatement类的实例用于针对通过 SQLConnection 实例打开的本地 SQL 数据库执行 SQL 语句

 

2.得到已插入行的数据库生成的行标识
得到自动增长列的行标识数值
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = con;
stmt.text="INSERT INTO emp (firstName, lastName, salary) VALUES ('f', 'l', 88)";
stmt.execute();
 
var result:SQLResult = stmt.getResult();
var primaryKey:Number = result.lastInsertRowID;
   
Alert.show(primaryKey.toString());
代码说明:
SQLResult 类提供对为响应 SQL 语句(SQLStatement 实例)执行而返回的数据的访问
lastInsertRowID属性:上次生成的行标识符(由 SQL INSERT 语句生成),如果执行的语句不是 INSERT 语句,则该值为 0。

 

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

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

实例代码:得到自动增长列的行标识数值(异步版本
private var stmt1:SQLStatement;
private function GetlastInsertRowID():void
{
 stmt1 = new SQLStatement();
 stmt1.sqlConnection = con;
 
 stmt1.text="INSERT INTO emp (firstName, lastName, salary) VALUES (@firstName, @lastName, @salary)";
 stmt1.parameters["@firstName"]="f";
 stmt1.parameters["@lastName"]="l";
 stmt1.parameters["@salary"]=88; 
 
 stmt1.addEventListener(SQLEvent.RESULT,okHandler);
 stmt1.addEventListener(SQLErrorEvent.ERROR,errorHandler);
 stmt1.execute();
}

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

private function errorHandler(evt:SQLErrorEvent):void
{
 Alert.show("失败");
 Alert.show(evt.error.message);
 Alert.show(evt.error.details);
}
代码说明:
此例题中用到了语句参数@firstName, @lastName, @salary,并分别赋值
要是使用未命名参数,把代码修改如下即可(注意数字索引从0开始):
stmt1.text="INSERT INTO emp (firstName, lastName, salary) VALUES (?, ?, ?)";
stmt1.parameters[0]="f";
stmt1.parameters[1]="l";
stmt1.parameters[2]=88;

 

4.删除操作
private function del():void
{
 var stmt:SQLStatement = new SQLStatement();
 stmt.sqlConnection = con;
 stmt.text="delete from emp where salary=:salary";
 stmt.parameters[":salary"]=88;
 stmt.execute();
 
 var result:SQLResult = stmt.getResult();
    var count:Number = result.rowsAffected;
   
    Alert.show("成功删除"+count.toString()+"行");
}
代码说明:
rowsAffected属性:指示受此操作影响的行数
请注意,当相关的 SQL 操作为不带 WHERE 子句的 DELETE 语句时(即该语句删除表中的所有行),rowsAffected 属性始终为 0,而不管删除了多少行。如果您需要知道删除的行数,则可以包括 WHERE 子句 WHERE 1 = 1,在这种情况下,将删除所有行,并且 rowsAffected 属性会精确反映已删除的行数

 

5.修改操作
private function updateData():void
{
 var stmt:SQLStatement = new SQLStatement();
 stmt.sqlConnection = con;
 stmt.text="update emp set lastName=:lastName where salary=:salary";
 stmt.parameters[":lastName"]="la";
 stmt.parameters[":salary"]=88;
 stmt.execute();
 
 var result:SQLResult = stmt.getResult();
    var count:Number = result.rowsAffected;
   
    Alert.show("成功修改"+count.toString()+"行");
}
代码说明:
把salary=88的lastName修改为"la"

 

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

  

收藏与分享

收藏到QQ书签 添加到百度搜藏 添加到百度搜藏 添加到雅虎收藏 分享到饭否 收藏到就喜欢网络收藏夹

RSS订阅我 什么是RSS?

feedsky    http://wap.feedsky.com/aierongrss    E-mail
订阅到雅蛙       使用RSS邮天下订阅    订阅到有道阅读
订阅到抓虾    鲜果阅读器订阅图标    Add to Google
訂閱 Bloglines    哪吒提醒    Subscribe in NewsGator Online

posted @ 2009-01-22 16:58 aierong 阅读(...) 评论(...) 编辑 收藏