使用事务操作SQLite数据库和一些常用的SQL语句

使用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语句在同一个事务中执行。

一些常见的SQL语句:

CREATE TABLE person (_id integer primary key autoincrement, name varchar(20))
SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句
如:select * from person
        select * from person order by id desc
        select name from person group by name having count(*)>1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智’,3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person  where id=10

创建数据库表

db.execSQL("CREATE TABLE person (_id integer primary key autoincrement, name varchar(20), amount integer)");//执行有更改的sql语句

删除数据库

db.execSQL("DROP TABLE IF EXISTS person");

插入一条数据

db.execSQL("insert into person (name,amount) values(?,?)", new Object[]{person.getName(),person.getAmount()});

更新一条数据

db.execSQL("update person set name=? where _id=?",  new Object[]{person.getName(),person.getId()});

删除一条数据

db.execSQL("delete from person where _id=?", new Object[]{id.toString()});

查询一条数据

Cursor cursor = db.rawQuery("select * from person where _id=?", new String[]{id.toString()});

分页

Cursor cursor = db.rawQuery("select * from person limit ?,?", new String[]{offset.toString(), maxResult.toString()});

返回游标

db.rawQuery("select _id as _id, name, amount from person limit ?,?",new String[]{offset.toString(), maxResult.toString()});

得到总数

db.rawQuery("select count(*) from person", null);

posted on 2012-03-14 13:34  forrest001  阅读(2472)  评论(2编辑  收藏  举报

导航