Android中的数据存储
;private static final String COMMA_SEP = ",";private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + " (" + FeedReaderContract.FeedEntry._ID + " INTEGER PRIMARY KEY," + FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP + FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP + ... // Any other options for the CREATE command " )";private static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME_ENTRIES;
?
就好像你存储文件到设备的内部存储上一样,Android在你应用相关的私有磁盘空间上存储你的数据库数据。
你的数据是安全的,因为默认情况下其他应用无法访问这块区域。
SQLiteOpenHelper?类提供了一些有用的APIs,当你使用这个类来获取数据库的引用时,系统仅在需要时执行可能长时间的操作:创建和更新数据库,而不是在应用启动的时候执行。
你需要做的仅仅是调用?getWritableDatabase()或getReadableDatabase()方法。
注意:因为它们是长时间运行的,所以请确保你在背景线程中调用:
getWritableDatabase()或getReadableDatabase()。
比如用?AsyncTask?或?IntentService。
?
为了使用SQLiteOpenHelper,创建一个子类,然后覆盖这三个回调函数:
onCreate(),?onUpgrade()?和?onOpen()。
你也可以实现?onDowngrade(),但这并不是必须的。
如下是一个对SQLiteOpenHelper的实现例子:
?
?
想要看一个Cursor中的一行,可以使用?Cursor?类中的各种move方法中的一个,当你开始读取值时你必须先调用它。
一般情况下,你应该先调用moveToFirst()方法,它将把读取位置指向结果中的第一项。
对每一行,你可以通过Cursor类的get方法读取各列内容,比如?getString()或?getLong()。
对每一个get方法,你必须指定你想要的列的索引,你可以通过?getColumnIndex()?或?getColumnIndexOrThrow()方法来获得索引。
比如:
;// Specify arguments in placeholder order.String[] selelectionArgs = { String.valueOf(rowId) };// Issue SQL statement.db.delete(table_name, selection, selectionArgs);?
;String[] selectionArgs = { String.valueOf(rowId) };int count = db.update( FeedReaderDbHelper.FeedEntry.TABLE_NAME, values, selection, selectionArgs);
?
?
?
?
参考资料《Beginning Android 4 Application Development》Chapter6:Data Persistence
Android官方文档:Training:Saving Data
http://developer.android.com/training/basics/data-storage/index.html
API Guides: Storage Options
http://developer.android.com/guide/topics/data/data-storage.html
?
