`

android 数据库操作 (非ContentProvider)

阅读更多
这里有个概念上需要纠正的东西,ContentProvider是android中共享数据的机制,而不是操作数据库的机制,android的数据库是sqlite。
下面演示如何建立数据库和操作它。
首先要来个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信息的封装而已。
好了,这样你就可以完成对数据库和表的创建以及相关操作了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics