SQLite數(shù)據(jù)庫在Android中的使用小結(jié)
一,SQLite簡介
SQLite是一個無服務器的,零配置的,事務性的SQL數(shù)據(jù)庫引擎。無服務器,意味著使用sqlite不需要聯(lián)網(wǎng);不需要配置,意味著不需要安裝和管理;同時sqlite遵循ACID原則。SQLIte是一款輕型的數(shù)據(jù)庫,占用資源非常低,在嵌入式設備中,可能只需幾百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)建路徑和一個游標工廠;
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:在此處指定一個列名,當數(shù)據(jù)為空時,會向該列插入一個null。一般設為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ù),當whereClause使用占位符時,在此處填入條件參數(shù),形式為字符串數(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)的,當我們使用SQLiteDatabase.query()方法時,會得到一個Cursor對象,Cursor指向的就是每一條數(shù)據(jù)。

- table:表名;
- columns:列名稱數(shù)組,指定從哪些列尋找;
- selection:查詢的條件,相當于where后的內(nèi)容;
- selectionArgs:查詢條件的參數(shù);
- groupBy:分組列;
- having:分組條件;
- orderBy:排序列;
- limit:分頁查詢限制;
Cursor游標類常用方法:

private void searchWord() {
//查詢條件
String selection = "word=?";
//查詢條件參數(shù)
String[] selectionArgs = { String.valueOf(word) };
//執(zhí)行查詢,獲取游標類
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ù)庫。主要負責數(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中事務的處理
SQLite采用如下方法來處理事務:
- beginTransaction():開啟事務;
- setTransactionSuccessful():標記事務成功;
- endTransaction():提交事務,當事務執(zhí)行失敗時,可調(diào)用此方法回滾事務;
db.beginTransaction();
try {
// 執(zhí)行事務中的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自定義View實現(xiàn)環(huán)形進度條的思路與實例
最近看到豆瓣FM的音樂播放界面,有一個環(huán)形的進度條挺不錯的,最近有空就想著實現(xiàn)了,所以下面這篇文章主要給大家介紹了Android自定義View實現(xiàn)環(huán)形進度條的思路與實例,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
Flutter?fluro時報錯type?'String'?is?not?a?subty
這篇文章主要介紹了Flutter使用fluro時報錯type?'String'?is?not?a?subtype?of?type?'Queue<Task>'解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-12-12
一文帶你徹底搞懂Behavior實現(xiàn)復雜的視覺聯(lián)動效果原理
這篇文章主要為大家介紹了一文帶你徹底搞懂Behavior實現(xiàn)復雜的視覺聯(lián)動效果原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04

