private final static int DATABASE_VERSION = 1;
private final static String DATABASE_NAME = "test.db";
public DBService(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
String sql = "CREATE TABLE [t_test](" + "[_id]AUTOINC,"
+ "[name]VARCHAR2(20) NOT NULL CONFLICT FAIL,"
+ "CONSTRAINT[sqlite_autoindex_te_test_1]PRIMARY KEY([_id]))";
db.execSQL(sql);
//向test数据库中插入20条记录
Random random = new Random();
for ( int i = 0;i<20;i++)
{
String s = "";
for(int j=0;j<10;j++)
{
char c = (char)(97+random.nextInt(26));
s+=c;
}
db.execSQL("insert into t_test(name)values(?)",new Object[]{s});
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//执行查询语句
public Cursor query(String sql,String[] args)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, args);
return cursor;
}
}
本例不需要对test.db进行升级,因此,只有在DBService类中的oncreate()方法中有创建数据库表的代码。DBService类创建了一个test.db数据库文件,并在该文件中创建了t_test表。在该表中包含两个字段_id和name。其中_id是自增字段,并且是主索引。
下面编写MapsDemo类。MapsDemo类是ListActivity的子类。在该类中的oncreate()方法中创建了DBService对象,然后通过DBService类的query方法查询出t_test表中的所有记录,并返回Cursor对象。MapsDemo类的代码如下:
package com.li;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.SimpleCursorAdapter;
public class MapsDemo extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
DBService dbService = new DBService(this);
//查询数据
Cursor cursor = dbService.query("select * from t_test", null);
注意:在绑定数据时,Cursor对象返回的记录集中必须包含一个叫"_id"的字段,否则将无法完成数据绑定。也就是说SQL语句不能是select name from t_contacts.如果在数据表中没有"_id"字段,可以采用其他方法来处理。
读到这里可能有人要问:数据存到哪里去了?系统在手机内存中的/data/data/<package name>/databases目录中创建数据库文件。