在整理ContentProvider知識點之前要先整理Sqlite資料庫的知識,因為ContentProvider中要使用到資料庫,
步入正題:Sqlite是起源是一艘軍艦上,一個資料庫程式員覺得潛艇正在使用的資料庫太過強大,每次更新升級操作復雜,耗時,效率不高,然后就想優化,目標就是設計出一個結構功能簡單,操作簡單,獨立性強的資料庫,因為也是開源的,之后就在開源社區流行起來,很多開發者都開始使用sqlite資料庫,很適合手機移動端
定義:Sqlite是是一款輕型的資料庫,是遵守ACID的關系型資料庫管理系統,是為了嵌入式系統,
特點:體積小,輕量級,獨立不依賴其他,簡潔,效率高,
Sqlite資料庫的資料型別:https://blog.csdn.net/u013360656/article/details/77963366 看到這位介紹的還不錯就不做贅述了,未考證其內容,請謹慎參考,
1.Sqlite資料庫的創建
繼承SqliteOpenHelper 資料庫助手類,重寫onCreate方法,創建表的陳述句就寫在這里
package com.zhouzhihao.test.database;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
/**
* description:
*
* @author zhouzhihao
* @time 2020/12/4 0004
*/
public class DbHelper extends SQLiteOpenHelper {
public DbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public DbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
}
@RequiresApi(api = Build.VERSION_CODES.P)
public DbHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) {
super(context, name, version, openParams);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql="create table user (id integer primary key autoincrement, name text(4),address text(5))";
db.execSQL(sql);
//版本4改動
String sql1="create table testid (_id integer primary key autoincrement, name text(4))";
db.execSQL(sql1);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (newVersion){
case 2:
//版本2改動,沒有break 所以版本4改動也會一層層執行
case 4:
//版本4改動
String sql1="create table testid (_id integer primary key autoincrement, name text(4))";
db.execSQL(sql1);
}
}
}
使用資料庫的類中呼叫,test是資料庫名稱,4是版本號
dBhelper=new DbHelper(this,"test",null,4);
2.增刪改查
SQLiteDatabase dataBase = dBhelper.getWritableDatabase();
try {
//創建存放資料的ContentValues物件
ContentValues values = new ContentValues();
values.put("name","zhou");
//資料庫執行插入命令
dataBase.insert("user", null, values);
String name="lili",address="廣東省廣州市";
String sql="insert into user (name,address) values ('"+name+"','"+address+"')";
dataBase.execSQL(sql);
//洗掉
//方式二
dataBase.delete("user", "name = ? or address = ?", new String[]{"zhouzhihao"});
String sql1="delete from user where name='lili'";
dataBase.execSQL(sql1);
//修改
ContentValues contentValues=new ContentValues();
contentValues.put("address","河南焦作");
dataBase.update("user",contentValues, "name=?",new String[]{"zhou"});
//方式二
String sql2="update user set address='廣東' where name='zhou'";
dataBase.execSQL(sql2);
//查看
Cursor cursor=dataBase.rawQuery("select * from user",null);
//方式二
cursor=dataBase.query("user",new String[]{"id","name","address"},"id=?",new String[]{"11"},null,null,null,null);
ArrayList<User> dats = new ArrayList<>();
while (cursor.moveToNext()) {
User user = new User();
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name_temp = cursor.getString(cursor.getColumnIndex("name"));
String address_temp = cursor.getString(cursor.getColumnIndex("address"));
user.setId(id);
user.setName(name_temp);
user.setAddress(address_temp);
dats.add(user);
}
cursor.close();
記得cursor 呼叫close關閉,釋放資源,
3.資料庫版本更新維護
重點分析:onCreate 只在版本創建的時候呼叫,onUpgrade 只在資料庫更新時呼叫,所以會有版本1升級成版本2,版本2升級成版本4,版本1升級成版本4,直接裝上去就是版本4等諸多情況
我們的目的就是使所有情況在代碼執行完,資料庫都是完整的兩張表,那么就要再onCreate和onUpgrade 存在兩份相同的代碼,但用戶的各種情況只會執行一份,注意:switch后面的case沒有break,這樣才不會出現跨版本更新時,有部分代碼漏掉的情況,
@Override
public void onCreate(SQLiteDatabase db) {
String sql="create table user (id integer primary key autoincrement, name text(4),address text(5))";
db.execSQL(sql);
//版本4改動
String sql1="create table testid (_id integer primary key autoincrement, name text(4))";
db.execSQL(sql1);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (newVersion){
case 2:
//版本2改動,沒有break 所以版本4改動也會一層層執行
case 4:
//版本4改動
String sql1="create table testid (_id integer primary key autoincrement, name text(4))";
db.execSQL(sql1);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/230750.html
標籤:其他
上一篇:牛客 - tokitsukaze and Inverse Number(樹狀陣列+逆序對定理)
下一篇:Number
