在整理ContentProvider知识点之前要先整理Sqlite数据库的知识,因为ContentProvider中要使用到数据库。

步入正题:Sqlite的起源是一艘军舰上,一个数据库程序员觉得潜艇正在使用的数据库太过强大,每次更新升级操作复杂,耗时,效率不高。然后就想优化,目标就是设计出一个结构功能简单,操作简单,独立性强的数据库,因为也是开源的,之后就在开源社区流行起来,很多开发者都开始使用sqlite数据库。很适合手机移动端

定义:Sqlite是是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,是为了嵌入式系统。

特点:体积小,轻量级,独立不依赖其他,简洁。效率高。

Sqlite数据库的数据类型:android sqlite支持的数据类型_seekrg的博客-CSDN博客    看到这位介绍的还不错就不做赘述了,未考证其内容,请谨慎参考。

最新出现了一个新的数据库 ,GreenDAO团队出了一个基于对象的数据库处理库ObjectBox,不再是sqlite数据库,速度快,使用方便,不用数据库版本更新。新项目应该拥抱ObjectBox,旧项目的greendao也可以转objectbox。可以去官网看使用文档,当你掉进坑里的时候,可以看一下我另一篇文章:Android ObjectBox 数据库避坑Duplicate files copied in APK lib/armeabi-v7a/libobjectbox.so_Android_周志豪378623234的博客-CSDN博客

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);}@Overridepublic 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);}@Overridepublic 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,这样才不会出现跨版本更新时,有部分代码漏掉的情况。

  @Overridepublic 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);}@Overridepublic 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);}}

最后,最后安利一下Android Studio 的数据库查看工具,太好用了,很多人不知道新版更新了这个功能:

Android Sqlite数据库详解相关推荐

  1. Android Room 数据库详解

    一.前言 数据库是 Room 的三大组件之一,数据库是用来存储数据的,是 Room 中必不可少的一部分.本篇幅将详细讲解 Room 数据库相关的内容(对于数据库的基本使用请参阅:Android Roo ...

  2. android sqlite 类使用,Android SQLite编程详解(不使用SQLiteOpenHelper类)

    数据库功能非常强大,使用起来也非常方便,SQLite数据库的一般操作包括:创建数据库.打开数据库.创建表.向表中添加数据.从表中删除数据.修改表中的数据.关闭数据库.删除指定表.删除数据库和查询表中的 ...

  3. Android SQLite编程详解

    SQLite 数据库功能非常强大,使用起来也非常方便,SQLite数据库的一般操作包括:创建数据库.打开数据库.创建表.向表中添加数据.从表中删除数据.修改表中的数据.关闭数据库.删除指定表.删除数据 ...

  4. android 数据库表格数据库数据库中,Android SQLite数据库中的表详解

    Android SQLite数据库 前言 以前写PHP的时候,内置了print_r()和var_dump()两个函数用于打印输出任意类型的数据内部结构,现在做Android的开发,发现并没有这种类似的 ...

  5. JMessage Android 端开发详解

    JMessage Android 端开发详解 目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 ...

  6. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  7. Android中AMS工作原理,Android AMS启动详解

    启动 在Android系统启动流程中中我们提到过,AMS是在system_service中启动的, //frameworks/base/services/java/corri/android/serv ...

  8. Android系统目录结构详解

    Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ...

  9. [Android]多进程知识点详解

    作者:Android开发_Hua 链接:https://www.jianshu.com/p/e0f833151f66 多进程知识点汇总: 一:了解多进程 二:项目中多进程的实现 三:多进程的优缺点与使 ...

最新文章

  1. ***CSS魔法堂:选择器及其优先级
  2. A SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'Lucene40' does not exist.
  3. 使用sql语句,查询 mysql 的安装地址
  4. 【程序员面试宝典】强制类型转换之面试例题2
  5. 【Python 2 到 3 系列】 print 是函数
  6. sql网站路径php,如何在源码中找出sql语句的位置呢
  7. .net core Entity Framework Core Code First 框架 分层开发
  8. Memcached总结
  9. 雨课堂知识点总结(七)
  10. 看图说话,FastJson 并没有那么流行!
  11. 微信小程序(底部导航)
  12. Sublime 编译汇编程序
  13. python控制电脑休眠唤醒键_使用Python实现Wake On Lan远程开机功能
  14. BP神经网络(Back Propagation Neural Network)Matlab简单实现
  15. 虚拟机上装oracle,cmd窗口输入法有问题,按了U,I,O,P,J,K,L,M这些键为什么不是UIOPJK
  16. 移动端实现图标拖拽效果
  17. 周末作业——循环练习题
  18. 基于Python的人机博弈象棋游戏的设计与实现
  19. Alpha阶段敏捷冲刺②
  20. Spring声明式事务管理的配置详解

热门文章

  1. 国内外MOOC平台商业模式调查
  2. 【原生HTML+SpringBoot】电子病历编辑器源码
  3. 《再学一周光线追踪》 学习 四 Perlin噪声
  4. 多线程(三)线程通信
  5. 《拳皇》对白大揭秘,在21部作品里草薙京和八神都说过什么悄悄话?
  6. Generic Webhook Trigger 远程触发
  7. 某live平台生产环境E-MR配置情况一览
  8. 大学计算机报项目,计算机工程学院资讯报(第14周5.27-5.31)
  9. grub search
  10. PbootCMS开发助手_pbootcms仿站工具_标签生成器下载