android sqlite 源码分析,Android SQLite数据库增删改查操作的案例分析

本文介绍了如何在Android应用中使用PersonService进行数据库操作,包括插入、更新、删除记录,以及实现分页查询。重点展示了如何通过SQL语句执行CRUD操作和使用rawQuery进行数据检索。
摘要由CSDN通过智能技术生成

package com.ljq.db;

import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.database.Cursor;

import com.ljq.domain.Person;

public class PersonService {

private DBOpenHelper dbOpenHelper = null;

/**

* 构造函数

*

* 调用getWritableDatabase()或getReadableDatabase()方法后,会缓存SQLiteDatabase实例;

* 因为这里是手机应用程序,一般只有一个用户访问数据库,所以建议不关闭数据库,保持连接状态。

* getWritableDatabase(),getReadableDatabase的区别是当数据库写满时,调用前者会报错,调用后者不会,

* 所以如果不是更新数据库的话,最好调用后者来获得数据库连接。

*

* 对于熟悉SQL语句的程序员最好使用exeSQL(),rawQuery(),因为比较直观明了

*

* @param context

*/

public PersonService(Context context){

dbOpenHelper = new DBOpenHelper(context);

}

public void save(Person person){

dbOpenHelper.getWritableDatabase().execSQL("insert into person(name, phone) values (?, ?)",

new Object[]{person.getName(), person.getPhone()});

}

public void update(Person person){

dbOpenHelper.getWritableDatabase().execSQL("update person set name=?, phone=? where id=?",

new Object[]{person.getName(), person.getPhone(), person.getId()});

}

public void delete(Integer... ids){

if(ids.length>0){

StringBuffer sb = new StringBuffer();

for(Integer id : ids){

sb.append("?").append(",");

}

sb.deleteCharAt(sb.length() - 1);

dbOpenHelper.getWritableDatabase().execSQL("delete from person where id in ("+sb+")", (Object[])ids);

}

}

public Person find(Integer id){

Cursor cursor = dbOpenHelper.getReadableDatabase().rawQuery("select id, name, phone from person where id=?",

new String[]{String.valueOf(id)});

if(cursor.moveToNext()){

int personid = cursor.getInt(0);

String name = cursor.getString(1);

String phone = cursor.getString(2);

return new Person(personid, name, phone);

}

return null;

}

public long getCount(){

Cursor cursor = dbOpenHelper.getReadableDatabase().query("person",

new String[]{"count(*)"}, null,null,null,null,null);

if(cursor.moveToNext()){

return cursor.getLong(0);

}

return 0;

}

/**

* 分页

*

* @param startResult 偏移量,默认从0开始

* @param maxResult 每页显示的条数

* @return

*/

public List getScrollData(int startResult, int maxResult){

List persons = new ArrayList();

//Cursor cursor = dbOpenHelper.getReadableDatabase().query("person", new String[]{"id, name, phone"},

//        "name like ?", new String[]{"%ljq%"}, null, null, "id desc", "1,2");

Cursor cursor = dbOpenHelper.getReadableDatabase().rawQuery("select * from person limit ?,?",

new String[]{String.valueOf(startResult), String.valueOf(maxResult)});

while(cursor.moveToNext()) {

int personid = cursor.getInt(0);

String name = cursor.getString(1);

String phone = cursor.getString(2);

persons.add(new Person(personid, name, phone));

}

return persons;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值