SQLite數(shù)據(jù)庫在Android中的使用小結(jié)
一,SQLite簡介
SQLite是一個無服務(wù)器的,零配置的,事務(wù)性的SQL數(shù)據(jù)庫引擎。無服務(wù)器,意味著使用sqlite不需要聯(lián)網(wǎng);不需要配置,意味著不需要安裝和管理;同時sqlite遵循ACID原則。SQLIte是一款輕型的數(shù)據(jù)庫,占用資源非常低,在嵌入式設(shè)備中,可能只需幾百k的內(nèi)存。
二,SQLIte在Android中的使用
Android中使用SQLiteDatabase代表數(shù)據(jù)庫,并提供了一系列方法來操作數(shù)據(jù)庫。對于常用的增刪改查操作,既可以使用execSQL()方法直接執(zhí)行sql語句,也可以使用Android提供的方法,由于execSQL()方法返回void,無法判斷是否執(zhí)行成功,所以除創(chuàng)建表之外的操作通常使用Android提供的一系列方法。
1,打開或者創(chuàng)建數(shù)據(jù)庫
使用openOrCreateDatabase()打開或者創(chuàng)建一個數(shù)據(jù)庫,如果數(shù)據(jù)庫存在則打開數(shù)據(jù)庫,反之則創(chuàng)建一個數(shù)據(jù)庫。創(chuàng)建成功則返回SQLiteDatabase對象,否則拋出異常。使用時需提供創(chuàng)建路徑和一個游標(biāo)工廠;
private void initDatabase() { String filePath = getFilesDir().getAbsolutePath() + "wordDB.db"; DB = SQLiteDatabase.openOrCreateDatabase(filePath, null); Log.i("DB", "數(shù)據(jù)庫初始化成功!"); }
2,創(chuàng)建表
表的創(chuàng)建可以通過SQLiteDatabase的exexSQL()方法直接執(zhí)行sql語句來創(chuàng)建;
private void inittable() { String table = "create table tb_word(" + "id integer primary key autoincrement," + "word varchar(20) not null," + "translation varchar(20) not null);"; DB.execSQL(table); }
3,插入數(shù)據(jù)
- table:所要執(zhí)行的表名;
- nullColumnHack:在此處指定一個列名,當(dāng)數(shù)據(jù)為空時,會向該列插入一個null。一般設(shè)為null;
- values:要插入的內(nèi)容;
private void insert() { //所要插入的數(shù)據(jù) ContentValues contentValues = new ContentValues(); contentValues.put("word", word); contentValues.put("translation", translation); //執(zhí)行插入 long id = wordDB.insert("tb_word", null, contentValues); if(id > 0){ Toast.makeText(this, "錄入成功!", Toast.LENGTH_SHORT).show(); } }
4,刪除數(shù)據(jù)
- table:表名;
- whereClause:修改條件,也就是sql語句中where后的內(nèi)容,可以使用占位符,如"id=?";
- whereArgs:修改條件參數(shù),當(dāng)whereClause使用占位符時,在此處填入條件參數(shù),形式為字符串?dāng)?shù)組;
private void delete() { //刪除條件 String whereClause = "word = ?"; //刪除條件參數(shù) String[] whereArgs = {String.valueOf(words.getWord())}; //執(zhí)行刪除 int row = wordDB.delete("tb_word", whereClause, whereArgs); if(row > 0){ Log.i("delete", "刪除成功"); }else { Log.i("delete", "刪除失敗"); } }
5,修改數(shù)據(jù)
- table:表名;
- values:修改的內(nèi)容;
- whereClause:修改的條件,與delete的一致;
- whereArgs:修改條件參數(shù);
private void update(){ //修改的內(nèi)容 ContentValues values = new ContentValues(); values.put("translation", translation); //修改條件 String whereClause = "word=?"; //修改條件參數(shù) String[] whereArgs = {word}; //執(zhí)行修改 int row = wordDB.update("tb_word", values, whereClause, whereArgs); if(row > 0){ Log.i("update", "更新成功"); }else { Log.i("update", "更新失敗"); } }
6,查詢數(shù)據(jù)
在Android中查詢數(shù)據(jù)是通過Cursor類來實現(xiàn)的,當(dāng)我們使用SQLiteDatabase.query()方法時,會得到一個Cursor對象,Cursor指向的就是每一條數(shù)據(jù)。
- table:表名;
- columns:列名稱數(shù)組,指定從哪些列尋找;
- selection:查詢的條件,相當(dāng)于where后的內(nèi)容;
- selectionArgs:查詢條件的參數(shù);
- groupBy:分組列;
- having:分組條件;
- orderBy:排序列;
- limit:分頁查詢限制;
Cursor游標(biāo)類常用方法:
private void searchWord() { //查詢條件 String selection = "word=?"; //查詢條件參數(shù) String[] selectionArgs = { String.valueOf(word) }; //執(zhí)行查詢,獲取游標(biāo)類 Cursor cursor = wordDB.query("tb_word", null, selection, selectionArgs , null, null, null); StringBuffer result = new StringBuffer(); while(cursor.moveToNext()){ int idOfWord = cursor.getColumnIndex("word"); String word1 = cursor.getString(idOfWord); int idOfTranslation = cursor.getColumnIndex("translation"); String translation = cursor.getString(idOfTranslation); result.append(word1 + ": " + translation + "\n"); } tv_words.setText(result.toString()); }
三,SQLiteOpenHelper類
Android提供SQLiteOpenHelper類來管理數(shù)據(jù)庫。主要負(fù)責(zé)數(shù)據(jù)庫的創(chuàng)建、版本更新,一般情況通過創(chuàng)建它的子類并擴展onCreate()和onUpgrade()方法來實現(xiàn)。
SQLiteOpenHelper類常用方法:
- abstract void onCreate():第一次創(chuàng)建數(shù)據(jù)庫時回調(diào);
- abstract void onUpgrade():數(shù)據(jù)庫版本更新時回調(diào);
- SQLiteDatabase getWritableDatabase():獲得可讀/寫的數(shù)據(jù)庫;
- SQLiteDatabase getReadableDatabase():獲得可讀的數(shù)據(jù)庫;
- void close():關(guān)閉所有打開的SQLiteDatabase;
(1)創(chuàng)建SQLiteOpenHelper的子類,并重寫方法:
public class MySqliteHelper extends SQLiteOpenHelper { public MySqliteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { String table = "create table tb_word(" + "id integer primary key autoincrement," + "word varchar(20) not null," + "translation varchar(20) not null);"; db.execSQL(table); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
(2)通過子類來創(chuàng)建數(shù)據(jù)庫:
private void initDatabaseHelper() { mySqliteHelper = new MySqliteHelper( this, "wordDB.db", null, 1 ); SQLiteHelperUtil.wordDB = mySqliteHelper.getWritableDatabase(); Log.i("wordDB", "數(shù)據(jù)庫初始化成功!"); }
四,SQLite中事務(wù)的處理
SQLite采用如下方法來處理事務(wù):
- beginTransaction():開啟事務(wù);
- setTransactionSuccessful():標(biāo)記事務(wù)成功;
- endTransaction():提交事務(wù),當(dāng)事務(wù)執(zhí)行失敗時,可調(diào)用此方法回滾事務(wù);
db.beginTransaction(); try { // 執(zhí)行事務(wù)中的sql語句 db.setTransactionSuccessful(); } finally { db.endTransaction(); } }
到此這篇關(guān)于SQLite數(shù)據(jù)庫在Android中的使用的文章就介紹到這了,更多相關(guān)Android SQLite數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- android studio使用SQLiteOpenHelper()建立數(shù)據(jù)庫的方法
- Android Studio 通過登錄功能介紹SQLite數(shù)據(jù)庫的使用流程
- Android使用SQLite數(shù)據(jù)庫的示例
- Android創(chuàng)建和使用數(shù)據(jù)庫SQLIte
- 實例講解Android App使用自帶的SQLite數(shù)據(jù)庫的基本方法
- Android App使用SQLite數(shù)據(jù)庫的一些要點總結(jié)
- Android中使用SQLite3 命令行查看內(nèi)嵌數(shù)據(jù)庫的方法
- Android使用SQLite數(shù)據(jù)庫的簡單實例
- Android SQLite數(shù)據(jù)庫增刪改查操作的使用詳解
相關(guān)文章
Android中傳值Intent與Bundle的區(qū)別小結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Android中傳值Intent與Bundle的區(qū)別,文中通過示例代碼以及圖文介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Android自定義view實現(xiàn)水波進(jìn)度條控件
這篇文章主要為大家詳細(xì)介紹了Android自定義view實現(xiàn)水波進(jìn)度條控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05Android側(cè)滑菜單控件DrawerLayout使用詳解
這篇文章主要為大家詳細(xì)介紹了Android側(cè)滑菜單控件DrawerLayout的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12模仿美團(tuán)點評的Android應(yīng)用中價格和購買欄懸浮固定的效果
這篇文章主要介紹了模仿美團(tuán)點評的Android應(yīng)用中價格和購買欄懸浮固定的效果,文章后半還針對快速滑動操作給出了一個響應(yīng)優(yōu)化的方法,需要的朋友可以參考下2016-04-04詳解Android的OkHttp包編寫異步HTTP請求調(diào)用的方法
OkHttp支持Callback異步回調(diào)來實現(xiàn)線程的非阻塞,下面我們就來詳解Android的OkHttp包編寫異步HTTP請求調(diào)用的方法,需要的朋友可以參考下2016-07-07一文帶你深入理解Android Window系統(tǒng)
Android中的窗口系統(tǒng)是應(yīng)用程序用戶界面的核心組件之一,它負(fù)責(zé)管理可視化區(qū)域、處理用戶輸入事件以及與系統(tǒng)UI交互,本文將深入介紹與Android窗口系統(tǒng)相關(guān)的重要概念,需要的朋友可以參考下2023-10-10Android開發(fā)使用json實現(xiàn)服務(wù)器與客戶端數(shù)據(jù)的交互功能示例
這篇文章主要介紹了Android開發(fā)使用json實現(xiàn)服務(wù)器與客戶端數(shù)據(jù)的交互功能,結(jié)合具體實例形式分析了Android使用json格式數(shù)據(jù)在服務(wù)器與客戶端傳遞實現(xiàn)數(shù)據(jù)庫查詢功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10