1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Android Sqlite数据库详解

Android Sqlite数据库详解

时间:2023-07-30 16:59:34

相关推荐

Android Sqlite数据库详解

在整理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 /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 的数据库查看工具,太好用了,很多人不知道新版更新了这个功能:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。