android中SQLite使用及特點(diǎn)
1.SQLite的特點(diǎn)
- SQLite是一個(gè)輕量級(jí)數(shù)據(jù)庫(kù),它設(shè)計(jì)目標(biāo)是嵌入式的,而且占用資源非常低
- SQLite沒有服務(wù)器進(jìn)程,通過文件保存數(shù)據(jù),該文件是跨平臺(tái)的
- 支持null,integer,real,text,blob五種數(shù)據(jù)類型,實(shí)際上SQLite也接受varchar,char,decimal等數(shù)據(jù)類型,只不過在運(yùn)算中或保存時(shí)會(huì)轉(zhuǎn)換成對(duì)應(yīng)的5種數(shù)據(jù)類型,因此,可以將各種類型數(shù)據(jù)保存到任何字段中
2.SQLite的使用
2.1數(shù)據(jù)庫(kù)的創(chuàng)建
在android中,創(chuàng)建SQLite數(shù)據(jù)庫(kù)非常簡(jiǎn)單。Android系統(tǒng)推薦使用SQLiteOpenHelper的子類創(chuàng)建數(shù)據(jù)庫(kù),因此需要?jiǎng)?chuàng)建一個(gè)類繼承自SQLiteOpenHelper,并重寫該類的onCreate和onUpgrade方法即可

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
/**
* 作為SQLiteOpenHelper子類必須有的構(gòu)造方法
* @param context 上下文參數(shù)
* @param name 數(shù)據(jù)庫(kù)名字
* @param factory 游標(biāo)工廠 ,通常是null
* @param version 數(shù)據(jù)庫(kù)的版本
*/
public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 數(shù)據(jù)庫(kù)第一次被創(chuàng)建時(shí)調(diào)用該方法
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
// 初始化數(shù)據(jù)庫(kù)的表結(jié)構(gòu),執(zhí)行一條建表的SQL語(yǔ)句
db.execSQL("create table user(u_id int not null primary key,u_name varchar(50) not null,age int)");
}
/**
* 當(dāng)數(shù)據(jù)庫(kù)的版本號(hào)增加調(diào)用
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
2.2新增(insert)
public void insert(String name,int age){
// 通過DBHelper類獲取一個(gè)讀寫的SQLiteDatabase對(duì)象
SQLiteDatabase db=dbHelper.getWritableDatabase();
// 創(chuàng)建ContentValue設(shè)置參數(shù)
ContentValues contentValues=new ContentValues();
contentValues.put("name",name);
contentValues.put("age",age);
// 插入數(shù)據(jù)
// insert方法參數(shù)1:要插入的表名
// insert方法參數(shù)2:如果發(fā)現(xiàn)將要插入的行為空時(shí),會(huì)將這個(gè)列名的值設(shè)為null
// insert方法參數(shù)3:contentValue
long i=db.insert("user",null ,contentValues);
// 釋放連接
db.close();
}
2.3修改(update)
public void update(String name,int age){
// 通過DBHelper類獲取一個(gè)讀寫的SQLiteDatabase對(duì)象
SQLiteDatabase db=dbHelper.getWritableDatabase();
// 創(chuàng)建ContentValue設(shè)置參數(shù)
ContentValues contentValues=new ContentValues();
contentValues.put("age",age);
// 修改數(shù)據(jù)
// 參數(shù)1:tablename
// 參數(shù)2:修改的值
// 參數(shù)3:修改的條件(SQL where語(yǔ)句)
// 參數(shù)4:表示whereClause語(yǔ)句中的表達(dá)式的占位符參數(shù)列表,這些字符串會(huì)替換where條件中?
db.update("user",contentValues,"name=?",new String[]{name});
// 釋放連接
db.close();
}
2.4刪除(delete)
public void delete(long id) {
// 通過DBHelper類獲取一個(gè)讀寫的SQLiteDatabase對(duì)象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 參數(shù)1:tablename
// 參數(shù)2:刪除的條件(SQL語(yǔ)句)
// 參數(shù)3:給修改的條件注入?yún)?shù),一個(gè)或多個(gè)
db.delete("user", "u_id=?", new String[]{id + ""});
// 釋放連接
db.close();
}
2.5查詢(query)
public void query() {
// 通過DBHelper類獲取一個(gè)讀寫的SQLiteDatabase對(duì)象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 參數(shù)1:table_name
// 參數(shù)2:columns 要查詢出來的列名。相當(dāng)于 select *** from table語(yǔ)句中的 ***部分
// 參數(shù)3:selection 查詢條件字句,在條件子句允許使用占位符“?”表示條件值
// 參數(shù)4:selectionArgs :對(duì)應(yīng)于 selection參數(shù) 占位符的值
// 參數(shù)5:groupby 相當(dāng)于 select *** from table where && group by ... 語(yǔ)句中 ... 的部分
// 參數(shù)6:having 相當(dāng)于 select *** from table where && group by ...having %%% 語(yǔ)句中 %%% 的部分
// 參數(shù)7:orderBy :相當(dāng)于 select ***from ?? where&& group by ...having %%% order by@@語(yǔ)句中的@@ 部分,如: personid desc(按person 降序)
Cursor cursor = db.query("user", null, null, null, null, null, null);
// 將游標(biāo)移到開頭
cursor.moveToFirst();
while (!cursor.isAfterLast()) { // 游標(biāo)只要不是在最后一行之后,就一直循環(huán)
int id=cursor.getInt(0);
String name=cursor.getString(1);
// 將游標(biāo)移到下一行
cursor.moveToNext();
}
db.close();
}
3.使用SQL語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)操作
// 通過DBHelper類獲取一個(gè)讀寫的SQLiteDatabase對(duì)象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// insert
db.execSQL("insert into user (id,name,age) values (?,?,?)",new Object[]{1,"張三",18});
// update
db.execSQL("update user set name=? where id=?",new Object[]{"張三",1});
// delete
db.execSQL("delete from user where id=1");
// query
Cursor cursor = db.rawQuery("select * from user where id=?", new String[]{"1"});
4.SQLite事務(wù)
SQLite數(shù)據(jù)庫(kù)同樣支持事務(wù)
事務(wù)操作后一定要使用
endTransaction()方法關(guān)閉事務(wù),當(dāng)執(zhí)行到endTransaction()時(shí),首先會(huì)檢查是否有事務(wù)執(zhí)行成功標(biāo)記,有則提交數(shù)據(jù)庫(kù),無則回滾數(shù)據(jù)
DBHelper dbHelper = new DBHelper(MainActivity.this, "test.db", null, 0);
// 通過DBHelper類獲取一個(gè)讀寫的SQLiteDatabase對(duì)象
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 開始事務(wù)
db.beginTransaction();
try {
// 標(biāo)記數(shù)據(jù)庫(kù)事務(wù)執(zhí)行成功
db.setTransactionSuccessful();
}catch (Exception e){
Log.i("事務(wù)處理失敗",e.getMessage());
}finally {
db.endTransaction(); //關(guān)閉事務(wù)
db.close(); // 關(guān)閉數(shù)據(jù)庫(kù)
}
到此這篇關(guān)于android中SQLite使用及特點(diǎn)的文章就介紹到這了,更多相關(guān)android使用SQLite內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android SQLite基本用法詳解
- Android SQLite數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)登錄功能
- Android使用gradle讀取并保存數(shù)據(jù)到BuildConfg流程詳解
- Android通過ViewModel保存數(shù)據(jù)實(shí)現(xiàn)多頁(yè)面的數(shù)據(jù)共享功能
- Android學(xué)習(xí)筆記-保存數(shù)據(jù)到SQL數(shù)據(jù)庫(kù)中(Saving Data in SQL Databases)
- Android 實(shí)現(xiàn)永久保存數(shù)據(jù)的方法詳解
- Android 如何使用SQLite保存數(shù)據(jù)
相關(guān)文章
Android開發(fā)MQTT協(xié)議的模型及通信淺析
這篇文章主要W為大家介紹了Android開發(fā)MQTT協(xié)議的模型及通信淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Android使用Spinner控件實(shí)現(xiàn)下拉列表的案例
今天小編就為大家分享一篇關(guān)于Android使用Spinner控件實(shí)現(xiàn)下拉列表的案例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
Android使用音頻信息繪制動(dòng)態(tài)波紋
這篇文章主要介紹了Android使用音頻信息繪制動(dòng)態(tài)波紋 的相關(guān)資料,需要的朋友可以參考下2016-02-02
Android通過HttpURLConnection和HttpClient接口實(shí)現(xiàn)網(wǎng)絡(luò)編程
這篇文章主要介紹了Android通過HttpURLConnection和HttpClient接口實(shí)現(xiàn)網(wǎng)絡(luò)編程的相關(guān)資料,需要的朋友可以參考下2015-02-02
android使用OkHttp實(shí)現(xiàn)下載的進(jìn)度監(jiān)聽和斷點(diǎn)續(xù)傳
本篇文章主要介紹了android使用OkHttp實(shí)現(xiàn)下載的進(jìn)度監(jiān)聽和斷點(diǎn)續(xù)傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
Android仿微信左右滑動(dòng)點(diǎn)擊切換頁(yè)面和圖標(biāo)
這篇文章主要為大家詳細(xì)介紹了Android仿微信左右滑動(dòng)點(diǎn)擊切換頁(yè)面和圖標(biāo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

