1.使用SQLiteOpenHelper抽象类建立数据库
public DatabaseHelper(Context context,String name,CursorFactoty factory,int version){//应用的上下文,数据库名称,记录集游标工厂(对查询结果进行迭代),数据库版本。
super(context,name,factory,version);
}
升级软件时,需要更改Version版本号就要调用onUpgrade()方法。
onUpgrade(SQLiteDatabase,int oldVersion,int newVersion);
一般的应用中会把数据库名和版本号改为一个常量,只用给构造器传一个Context就可以了:
private static final String NAME="sharp.db";
private static final int version=1;//版本号不能为0
public DatabaseHelper(Context context){
super(context,NAME,null,version);
}
在用户第一次使用软件时,会创建数据库,而oncreate()方法在数据库初次创建时被调用,他的参数是操作数据库的工具类,可以提供对数据库的添、删、改、查等方法。
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE person(personid integer primary key autoincrement,name varchar(20),age integer)");
}
假如原来的版本号为1,且与现在的不一样,同时person表比版本1多加了一个字段address,那就要调用onUpgrade()方法,删除原有的表,再调用onCreate()方法重新建表。
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
db.execSQL("DROP TABLE IF EXISTS person");
onCreate(db);
}
2.实现添、删、查、改的方法
首先在一个新建类中实例化DatabaseHelper工具类,然后由外部调用OtherPersonService类传入上下文:
private DatabaseHelper databaseHelper;
private Context context;
public OtherPersonService(Context context){
this.context=context;
databaseHelper =new DatabaseHelper(context);
}
添加:
public void save(Person person){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",person.getName());
values.put("age",person.getAge());
database.insert("person","name",values);//参数分别是表名,参数为null时,用来组拼成完整的SQL语句,添加的数据
//database.close();
}
更新:
public void update(Person person){
SQliteDatabase database = databeseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",person.getName());
values.put("age",person.getAge());
database.updata("person",values,"personid=?",new String[]{String.valueOf(person.getId())});//参数分别是表名,更新的数据,SQL语句中条件部分的语句,占位符的值。
}
查找:
public Person find(Integer id){
SQLiteDatabae database = databaseHelper.getWritableDatabase();
Cursor cursor = database.query("person",new String[]{"personid","name","age"},"personid=?",new String[]{String.valueOf(id)},null,null,null);//参数分别为表名,查找需要返回的字段,SQL语句中的条件语句,占位符的值,表示分组(可设为null),SQL语句中的having(可设为null),表示结果的排序(可设为null)。
if(cursor.moveToNext()){
Person person = new Person();
person.setId(cursor.getInt(0));
person.setName(cursor.getString(1));
person.setAge(cursor.getInt(2));
return person;
}
return null;
}
删除:
public void delete(Integer id){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
database.delete("person","personid=?",new String[]{String.valueOf(id)});
}
分页:
public List<Person> getScrollData(int startResult,int maxResult){
List<Person>persons = new ArrayList<Person>();
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = fatabase.query("person",new String[]{"personid","name","age"},null,null,null,null,"personid desc",startResult+","+maxResult);//参数分别是表名,查找需要返回的字段,SQL语句中的条件语句,占位符的值,分组(可为null),SQL语句中的having(可设为null),表示结果的排序(可设为null),组拼成完整的SQL语句。
while(cursor.movetoNext()){//迭代添加到persons
Person person = new Person();
person.setId(cursor.getInt(0));
person.setName(cursor.getString(1));
person.setAge(cursor.getInt(2));
persons.add(person);
}
return persons;
}
获取记录总数:
public long getCount(){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = database.query("person",new String[]{"count(*)"},null,null;null;null;null);
if(cursor.moveToNext()){
return cursor.getLong(0);
}
return 0;
}