下面演示如何建立数据库和操作它。
首先要来个SQLiteOpenHelper子类。
public class DatabaseHelper extends SQLiteOpenHelper { private final static String NAME="sharp.db" ; public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } public DatabaseHelper(Context context){ super(context, NAME, null, 1 ); } /** * 用户第一次使用软件时调用,实现数据库的操作crud */ @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.i("save" , "create" ); db.execSQL("create table person(personid integer primary key autoincrement,name varcahr(20),age integer)" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("drop table if exists person" ); onCreate(db); } /** * 根据版本号进行更新 * @param db * @param mNewVersion */ public void checkVersionCreate(SQLiteDatabase db,int mNewVersion){ int version = db.getVersion(); if (version != mNewVersion) { db.beginTransaction(); try { if (version == 0 ) { onCreate(db); }else{ onUpgrade(db, version,mNewVersion); } db.setVersion(mNewVersion); //设置为新的版本号 db.setTransactionSuccessful(); } finally{ db.endTransaction(); } } } /** * 数据库名不空,获得数据库实例 * @param mDatabase * @param mContext * @param mName * @param mFactory * @return */ public SQLiteDatabase getDatabase(SQLiteDatabase mDatabase,Context mContext,String mName,CursorFactory mFactory){ if (mDatabase != null && mDatabase.isOpen() && !mDatabase.isReadOnly()) { return mDatabase; // The database is already open for business } if (mName == null) { mDatabase = SQLiteDatabase.create(null); } else { mDatabase = mContext.openOrCreateDatabase(mName, 0 , mFactory); } return mDatabase; } }
然后再写个类来进行db的操作。
public class DbService { private DatabaseHelper databaseHelper; private Context context; public DbService(Context context){ this .context=context; databaseHelper=new DatabaseHelper( this .context); } //保存 public void save(Person person){ SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)" , new Object[]{person.getName(), person.getAge()}); } //更新 public void update(Person person){ SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("update person set name=?,age=? where personid=?" , new Object[]{person.getName(), person.getAge(), person.getId()}); } //根据id查找 public Person find(Integer id){ SQLiteDatabase db = databaseHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select personid,name,age from person where personid=?" , new String[]{String.valueOf(id)}); if (cursor.moveToNext()){ //迭代记录集 Person person = new Person(); //实例化person person.setId(cursor.getInt(cursor.getColumnIndex("personid" ))); person.setName(cursor.getString(1 )); person.setAge(cursor.getInt(2 )); //将查到的字段,放入person, return person; } cursor.close();//游标关闭 return null ; } //删除 public void delete(Integer id){ SQLiteDatabase db=databaseHelper.getWritableDatabase(); db.execSQL("delete from person where id=?" , new Object[]{id}); } // public List<Person> getScrollData( int firstResult, int maxResult){ List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = databaseHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select personid,name,age from person limit ?,?" , new String[]{String.valueOf(firstResult),String.valueOf(maxResult)}); //firstResult开始索引 while (cursor.moveToNext()){ //maxResult每页获取的记录数 Person person = new Person(); person.setId(cursor.getInt(cursor.getColumnIndex("personid" ))); person.setName(cursor.getString(1 )); person.setAge(cursor.getInt(2 )); persons.add(person); } cursor.close(); return persons; } // public long getCount(){ SQLiteDatabase db = databaseHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select count(*) from person" , null ); //没有占位符参数的话,直接用null cursor.moveToFirst(); long count = cursor.getLong( 0 ); cursor.close(); return count; } // public void close(){ databaseHelper.close(); } }
当然Person是自己写的一个java bean。对Person信息的封装而已。
好了,这样你就可以完成对数据库和表的创建以及相关操作了。