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

 本章主要总结数据库的插入,删除,修改,以及语句参数的使用

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"代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值