SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类SQLiteOpenHelper 的构造函数。这个方法需要四个 参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的 游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整 数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需 要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个 旧的版本号和一个新的版本号, 这样你就可以清楚如何把一个数据库从旧 的模型转变到新的模型。
package cn.csdn.service;
import android.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
importandroid.database.sqlite.SQLiteOpenHelper;
importandroid.util.Log;
public classDatabaseHelper extends SQLiteOpenHelper {
static String dbname = "mydb.db";
static int dbversion = 1;
public DatabaseHelper(Context context){//上下文 数据库名 游标工厂 版本号
super(context, dbname, null,dbversion);
}
//只在初次使用数据库的时候会被自动调用
public void onCreate(SQLiteDatabase arg0){
Log.i("TAG", " 被调用了");
String sql = "create tableperson(personid integer primary key autoincrement,"+"name varchar(20),ageinteger)";
arg0.execSQL(sql);
}
public void onUpgrade(SQLiteDatabasearg0, int arg1, int arg2) {
Log.i("TAG", " 被调用了");
String sql="alter table person add phone char(20) null";
arg0.execSQL(sql);
}
}
接下来讨论具体如何创建表、插入数据、删除表等等
publicPersonService(Context context){
dbHelper= new DatabaseHelper(context);
}
publicvoid add(Person person){
SQLiteDatabasedb = dbHelper.getReadableDatabase();
Stringsql = "insert into person(name, age, phone) values(?,?,?)";
db.execSQL(sql,newObject[]{person.getName(), person.getAge(), person.getPhone()});
}
publicvoid delete(int id){
SQLiteDatabasedb = dbHelper.getReadableDatabase();
Stringsql = "delete from person where personid=?";
db.execSQL(sql,newObject[]{id});
}
publicvoid update(Person person, int id){
SQLiteDatabasedb = dbHelper.getReadableDatabase();
Stringsql = "update person set name=?, age=?, phone=? where personid=?";
db.execSQL(sql,newObject[]{person.getName(),person.getAge(),person.getPhone(), id});
}
publicPerson find(int id){
SQLiteDatabasedb = dbHelper.getReadableDatabase();
Stringsql = "select * from person where personid=?";
Cursorcursor = db.rawQuery(sql, new String[]{String.valueOf(id) });
if(cursor.moveToNext()){
Personperson = new Person();
person.setPersionid(cursor.getInt(0));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setAge(cursor.getInt(2));
person.setPhone(cursor.getString(3));
returnperson;
}
returnnull;
}
SQLite 中重要的方法 Cursor
在你理解和使用Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:
Cursor 是每行的集合。
使用 moveToFirst() 定位第一行。
你必须知道每一列的名称。
你必须知道每一列的数据类型。
Cursor 是一个随机的数据源。
所有的数据都是通过下标取得。
关于 Cursor 的重要方法:
close()
关闭游标,释放资源
copyStringToBuffer(intcolumnIndex, CharArrayBuffer buffer)
在缓冲区中检索请求的列的文本,将将其存储
getColumnCount()
返回所有列的总数
getColumnIndex(StringcolumnName)
返回指定列的名称,如果不存在返回-1
getColumnIndexOrThrow(StringcolumnName)
从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
getColumnName(intcolumnIndex)
从给定的索引返回列名
getColumnNames()
返回一个字符串数组的列名
getCount()
返回Cursor 中的行数
moveToFirst()
移动光标到第一行
moveToLast()
移动光标到最后一行
moveToNext()
移动光标到下一行
moveToPosition(int position)
移动光标到一个绝对的位置
moveToPrevious()
移动光标到上一行