系列文章导航
Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表)
Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
Adobe AIR中使用Flex连接Sqlite数据库(3)(查询)
Adobe AIR中使用Flex连接Sqlite数据库(4)(事务)
Flex,Fms3相关文章索引
Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)
免费美女视频聊天,多人视频会议功能加强版本(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
我的系列文章
A.Sql Server2005 Transact-SQL 新兵器学习
B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex
我的好文推荐
FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8>
Sql Server2005 Transact-SQL 新兵器学习总结之-总结
MS SQL数据库备份和恢复存储过程(加强版本)
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
WAP开发资料站(最新更新)
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列 化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
ASP.NET状态管理之一(概括篇)
Flex,Fms学习笔记
banner
希望上面提到的知识对您有所提示,同时欢迎交流和指正
作者:aierong
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!
本文转自aierong博客园博客,原文链接:http://www.cnblogs.com/aierong/archive/2009/01/22/flex_Sqlite_Add_Delete_Update.html如需转载请自行联系原作者