欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android Sqlite数据库详解

程序员文章站 2024-01-01 11:25:46
在整理ContentProvider是知识点之前要先整理Sqlite数据库的知识,因为ContentProvider中要使用到数据库。步入正题:Sqlite是起源是一艘军舰上,一个数据库程序员觉得潜艇正在使用的数据库太强大的,每次更新升级操作复杂,耗时,效率不高。然后就想优化,目标就是设计出一个简单,操作简单,独立性强的数据库,因为也是开源的,之后就在开源社区流行起来,很多开发者都开始使用sqlite数据库。定义:Sqlite是是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,是为了嵌入式系...

在整理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://blog.csdn.net/u012553125/article/details/110574498

上一篇:

下一篇: