当前位置:数据库 > SQLite >>

Android学习笔记----在SQLite中使用事务

18_在SQLite中使用事务
1.转账的事物实现:
  update person set amount=amount-10 where personid=1;
  update person set amount=amount+10 where personid=2;
-----------------------------------------------------------
2.使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到
 
 
endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()
 
 
之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有
 
 
调用setTransactionSuccessful() 方法则回滚事务。使用例子如下: SQLiteDatabase db 
 
 
= ....;
db.beginTransaction();//开始事务
try {
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播
 
 
客", 4});
    db.execSQL("update person set name=? where personid=?", new Object[]{"传智", 
 
 
1});
    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当
 
 
前事务,如果不调用此方法会回滚事务
} finally {
    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
db.close(); 
上面两条SQL语句在同一个事务中执行。
-------------------------------------------------------------------
3.在SQLite中使用事务的代码实现:
  DBSQLIte项目,注意是在这个项目基础上改的,就是在原来的person数据库中加了一个
  amount字段;
-----------------------
/DBSQLIte/src/com/credream/entity/Person.java
package com.credream.entity;
 
 
 
 
 
public class Person
{
private Integer id;
private String name;
private String phone;
private Integer amount;
 
 
 
 
 
 
public Person()
{
 
}
 
 
 
 
 
 
public Person(Integer id, String name, String phone,Integer amount)
{
this.id = id;
this.name = name;
this.phone = phone;
}
 
 
/*public Person(String name, String phone)
{
this.name = name;
this.phone = phone;
}*/
 
 
public Person(String name, String phone, Integer amount)
{
 
this.name = name;
this.phone = phone;
this.amount = amount;
}
 
 
public Integer getId()
{
return id;
}
 
 
 
 
 
 
 
 
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPhone()
{
return phone;
}
public void setPhone(String phone)
{
this.phone = phone;
}
 
 
 
 
 
 
public Integer getAmount()
{
return amount;
}
 
 
 
 
 
 
public void setAmount(Integer amount)
{
this.amount = amount;
}
 
 
 
 
 
 
@Override
public String toString()
{
return "Person [amount=" + amount + ", id=" + id + ", name=" + name
+ ", phone=" + phone + "]";
}
 
 
}
--------------------------------------------------------------------------
使用代码,给person表添加amount列:
/DBSQLIte/src/com/credream/service/DBOpenHelter.java
 package com.credream.service;
 
 
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
 
 
public class DBOpenHelter extends SQLiteOpenHelper
{
//父类没有默认构造器,需要显示调用
public DBOpenHelter(Context context)
{
//super(context, "credream.db", null, 2);
super(context, "credream.db", null, 3);
//数据库创建完成后,默认会保存在<包>/database/文件夹下
//当修改版本号时候,会触发:onUpgrade方法
//第二个:指定数据库名称,
//第三个:游标工厂,用来迭代,查询后的结果集,null代表使用系统默认的
 
 
游标工厂
//版本号,大于0
 
}
/**
 * 这个方法是在数据库第一次被创建的时候调用的
 */
@Override
public void onCreate(SQLiteDatabase db)
{
//SQLiteDatabase这个类,封装了增删改查操作,也叫做数据库操作实例
db.execSQL("CREATE TABLE person (personid integer primary key 
 
 
autoincrement, name varchar(20))"); 
//这里也可以不写name的数据类型,因为sqlite是数据类型无关的,就是写
 
 
了varchar(20),也可以写入超过20的内容
 
 
}
/**
 * 当数据库的版本号变更的时候被调用
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//db.execSQL("alter table person add phone varchar(12) null");
db.execSQL("alter table person add amount integer");
 
 
}
 
 
}
-----------------------------------------------------------------
/DBSQLIte/src/com/credream/service/PersonService.java
package com.credream.service;
 
 
import java.util.ArrayList;
import java.util.List;
 
 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.credream.entity.Person;
 
 
public class PersonService
{
private DBOpenHelter dbOpenHelter;
public PersonService(Context context){
this.dbOpenHelter=new DBOpenHelter(context);
}
 
public void payment (){
SQLiteDatabase db=dbOpenHelter.getWritableDatabase();
/*db.beginTransaction();//开启事物
db.execSQL("update person set amount=amount-10 where 
补充:移动开发 , Android ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,