編輯:關於Android編程
源碼下載(免下載積分):下載
對於保存重復或者結構化的數據數據,使用數據庫很好的。在android對於數據庫的API在
android.database.sqlite包中。
創建並操作數據庫:
創建:
1. 繼承
SQLiteOpenHelper
//繼承SQLiteOpenHelper類,
public class DictionaryOpenHelper extends SQLiteOpenHelper{
2. 定義相關的成員變量和常量
public static final String DABASENAME = "dictionary";
private static final int DATABASE_VERSION = 1;
private SQLiteDatabase mDatabase;
private Context mContext;
//定義table相關的內容
/*
* 實現BaseColumns接口,內部類中會有一個關鍵字_ID。android中的一些類希望有_ID,
*例如cursor,但它不是必須的,但能夠幫助數據庫和android框架更好的協調
*/
public static class DictionaryEntry implements BaseColumns
{
public static final String TAB_NAME = "words";
public static final String COLUMN_WORD = "word";
public static final String COLUMN_DEFINATION = "defination";
}
//用於創建數據庫
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
+DictionaryEntry.TAB_NAME+"("+DictionaryEntry._ID
+" INTEGER PRIMARY KEY,"+DictionaryEntry.COLUMN_WORD+","
+DictionaryEntry.COLUMN_DEFINATION + ")";
public DictionaryOpenHelper(Context context) {
super(context, DABASENAME, null, DATABASE_VERSION);
}
3. 實現
SQLiteOpenHelper的相關的函數
//當第一創建數據庫時會被調用
@Override
public void onCreate(SQLiteDatabase db) {
//
db.execSQL(SQL_CREATE_ENTRIES);
//讀取文件並添加多行
loadDictionary();
}
private void loadDictionary()
{
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
loadWords();
}
});
}
private void loadWords()
{
//讀取資源
final Resources resources = mContext.getResources();
InputStream inputStream = resources.openRawResource(R.raw.definitions);
Scanner scanner = new Scanner(inputStream);
while(scanner.hasNextLine())
{
String string = scanner.nextLine();
String[] strings = string.split("-");
if (strings.length < 2) {
continue;
}
loadWord(strings[0].trim(), strings[1].trim());
}
}
//添加行
private void loadWord(String word,String defination)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DictionaryEntry.COLUMN_WORD,
DictionaryEntry.COLUMN_DEFINATION);
mDatabase.insert(DictionaryEntry.TAB_NAME, null, contentValues);
}
//當數據庫升級的時候會被調用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// TODO Auto-generated method stub
db.execSQL(SQL_CREATE_ENTRIES);
onCreate(db);
}
注意:
- 數據存儲在內部存儲中,數據是安全的,因為其他的應用程序不能夠訪問數據庫
- 在調用getWritableDatabase() or getReadableDatabase()來操作長時間的操作,
要使用後台線程,例如AsyncTask或者IntentService
操作
//1. 創建ContentValues對象並添加信息
ContentValues contentValues = new ContentValues();
contentValues.put(DictionaryEntry.COLUMN_WORD,
DictionaryEntry.COLUMN_DEFINATION);
//2. 添加到數據庫中
mDatabase.insert(DictionaryEntry.TAB_NAME, null, contentValues);
從數據庫中讀取數據
使用query()方法來檢索數據,並返回一個Cursor對象
mDatabase.query(
table, //table名
columns, //返回的關鍵字
selection, //where語句的關鍵字
selectionArgs, //where的值
groupBy, //用於聲明怎麼去組織行
having, //用於聲明那個行組應該包含到Cursor中
orderBy); //怎麼哪個關鍵字排序
從數據庫中刪除數據
從數據庫表中刪除數據,需要指定selection,用於指定要刪除哪一行,
mDatabase.delete(table, //table名
whereClause, //用於操作的WHERE子句
whereArgs); //WHERE子句的參數
從數據庫中更新數據
當需要修改數據庫表中的數據時,使用update()方法
mDatabase.update(table, //要更新的table名
values, //ContentValues的對象,用於指定更新的數據
whereClause, //where子句,用於指定哪一個行(記錄)需要修改
whereArgs); //where子句的值
例子並未添加所有操作。
數據庫的調試:
Android SDK中包含一個工具是sqlite3,這個工具能夠查看數據庫表中內容,使用這個工具只需簡單的命令行
~$ adb devices
List of devices attached
emulator-5554 device
~$ adb -s emulator-5554 shell
#sqlite3 /data/data/com.example.mydictionary/databases/dictionary
sqlite> .table
以後就能根據數據相關的命令查看數據庫表中的數據了,
參考資料:
http://developer.android.com/training/basics/data-storage/databases.html http://developer.android.com/guide/topics/data/data-storage.html
注:原理講解可能會用到rx1.0的概念,但是代碼示例部分用rx2.0 來展示引言很多做android開發朋友對rxjava都有熟悉,github上也出現了很多的基於rx
Android用戶界面設計:基本按鈕 本文向你展示了在你的Android應用程序中創建一個簡單的Button或ImageButton控件的步驟。首先,你會
1.在移動設備訪問m.alipay.com時,如果本地安裝了支付寶客戶端,則浏覽器會調用本地客戶端,沒有安裝則會跳轉到下載頁面,提示安裝。剛好有這樣的需求,就分析了下支付
1.環境配置(溫馨提示,圖片看不清楚的,可以點擊鼠標右鍵,在新選項卡中查看圖片^^)1)打開studio建立新的工程,打開如下位置,下載紅線所示的ndk及LLDB工具。&