Android 提供了对 SQLite 数据库的完全支持。每个 App 使用自己的数据库,App 内所有类都可以通过名字访问创建的数据库,但只限于此 App 内。
推荐使用一个继承 SQLiteOpenHelper 的子类,重写 onCreate() 方法去创建一个的 SQLite 数据库。通过执
行 SQLite 命令去创建数据库表。例如:
CreateTablepackage com.wordpress.ljzh.android.hello.datastore;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
/**
* @author LingJun
* @date 2011-3-14
*
*/
public class DBHelper extends SQLiteOpenHelper {
private SQLiteDatabase db;
private static final int DATABASE_VERSION = 1;
private static final String DB_NAME = "sample.db";
private static final String TABLE_NAME = "pill";
/**
* @param context
* @param name
* @param factory
* @param version
*/
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, DB_NAME, null, DATABASE_VERSION);
db = getWritableDatabase();
}
/*
* (non-Javadoc)
*
* @see
* android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
* .SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase arg0) {
db.execSQL("create table " + TABLE_NAME
+ " (id integer primary key autoincrement, "
+ " name text not null) ");
}
/*
* (non-Javadoc)
*
* @see
* android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
* .SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
}
然后我们可以使用定义的构造方法生成 SQLiteOpenHelper 实例。可以使用 getWritableDatebase() 方法得到可读写的代表数据库的对象(SQLiteDatabase 对象),或者使用 getReadableDatabase() 方法获取一个只读的代表数据库的对象,通过此对象提供的方法实现对 SQLite 的操作。
我们使用 SQLiteDatabase 对象的 query() 方法执行 SQLite 查询操作,query() 方法接受各种参数,如 the table to query, the projection, selection, columns, grouping, etc. 如果需要更复杂的查询,如需要给查询列别名,那我们使用 SQLiteQueryBuilder, 此对象提供了几种方便的方法用于创建查询。
CreateTable /**
* Select All returns a cursor
* @return the cursor for the DB selection
*/
public Cursor cursorSelectAll() {
Cursor cursor = this.db.query(TABLE_NAME, // Table Name
new String[] { "id", "name" }, // Columns to return
null, // SQL WHERE
null, // Selection Args
null, // SQL GROUP BY
null, // SQL HAVING
"name"); // SQL ORDER BY
return cursor;
}
/**
* Select All that returns an ArrayList
* @return the ArrayList for the DB selection
*/
public ArrayList<Friend> listSelectAll() {
ArrayList<Friend> list = new ArrayList<Friend>();
Cursor cursor = this.db.query(TABLE_NAME,
new String[] { "id", "name" }, null, null, null, null, "name");
if (cursor.moveToFirst()) {
do {
Friend f = new Friend();
f.id = cursor.getString(0);
f.name = cursor.getString(1);
list.add(f);
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return list;
}
注:代码中 db 对象是通过 DBHelper 获取的数据库对象。
每个 SQLite 查询都是返回一个 Cursor, 它指向查询结果集。通过此 Cursor 去读取查到的行,列。
Technorati 标签:
SQLite,
Android