当前位置:   article > 正文

Android--SQLite_android sqlite

android sqlite

数据库SQLite

7.2.1 SQLite介绍

SQLite是一种小巧的嵌入式数据库,在App开发过程中只用到数据定义和数据操纵两类SQL

数据定义语言:表格的创建,删除,结构修改

数据操纵语言:数据的增删改查

表格创建

SQLite支持整型INTEGER、长整型LONG、字符串VARCHAR、浮点数FLOAT,但不支持布尔类型。布尔类型的数据要使用整型保存,如果直接保存布尔数据,在入库时SQLite会自动将它转为0或1,其中0表示false,1表示true。

表格修改

表格的修改动作由alter命令完成,格式为"ALTER TABLE 表格名称 修改操作,"。不过SQLite只支持增加字段,不支持修改字段,也不支持删除字段。对于字段增加操作,需要在alter之后补充add命令,具体格式如“ALTER TABLE 表格名称 ADD COLUMN 字段名称 字段类型;”。

注意,SQLite的ALTER语句每次只能添加1列字段,若要添加多列,就得分多次添加。

7.2.2 数据库管理器SQLiteDataBase

SQLiteDatabase是SQLite的数据库管理类,它提供了若干操作数据表的APl,常用的方法有3类:

1.管理类,用于数据库层面的操作。

  • openDatabase:打开指定路径的数据库。
  • isOpen:判断数据库是否已打开。
  • close:关闭数据库。
  • getVersion:获取数据库的版本号。
  • setVersion:设置数据库的版本号。
SQLiteDatabase sqLiteDatabase = openOrCreateDatabase("zhangsan", MODE_PRIVATE, null);
  • 1

2.事务类,用于事务层面的操作。

  • beginTransaction:开始事务。
  • setTransactionSuccessful:设置事务的成功标志。
  • endTransaction:结束事务,结束事务时查看是否有事务成功的标志,成功则提交并结束,不成功则回滚

3.数据处理类,用于数据表层面的操作。

  • execSQL:执行拼接好的SQL控制语句。
  • delete:删除符合条件的记录。
  • update:更新符合条件的记录。
  • insert:插入一条记录。
  • query:执行查询操作,返回结果集的游标。
  • rawQuery:执行拼接好的SQL查询语句,返回结果集的游标。
7.2.3 SQLiteOpenHelper

SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用。

SQLiteOpenHelper的具体使用步骤如下:

  1. 新建一个继承自SQLiteOpenHelper的数据库操作类,重写onCreate和onUpgrade两个方法。
  2. 封装保证数据库安全的必要方法。
  3. 提供对表记录进行增加、删除、修改、查询的操作方法。
package com.example.lesson.utils.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class SQLiteUtils extends SQLiteOpenHelper {
    private static SQLiteUtils mHelper = null;
    private static SQLiteDatabase mReadDatabase = null;
    private static SQLiteDatabase mWriteDatabase = null;

    //单例模式
    public static SQLiteUtils getInstance(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        if (mHelper == null) {
            return new SQLiteUtils(context, name, factory, version);
        } else {
            return mHelper;
        }
    }

    //构造方法,必须调用父类的构造方法
    public SQLiteUtils(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //打开写链接
    private SQLiteDatabase openWriteLink() {
        if (mWriteDatabase == null || !mWriteDatabase.isOpen()) {
            return mHelper.getWritableDatabase();
        } else {
            return mWriteDatabase;
        }
    }

    //打开读链接
    private SQLiteDatabase openReadLink() {
        if (mReadDatabase == null || !mReadDatabase.isOpen()) {
            return mHelper.getReadableDatabase();
        } else {
            return mReadDatabase;
        }
    }

    //关闭链接
    private void closeLink() {
        if (mReadDatabase != null && mReadDatabase.isOpen()) {
            mReadDatabase.close();
            mReadDatabase = null;
        }
        if (mWriteDatabase != null && mWriteDatabase.isOpen()) {
            mWriteDatabase.close();
            mWriteDatabase = null;
        }
    }

    //数据库初始化时需要进行的一些操作,比如创建数据表
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
7.2.4 增删改查的方法

//获取写入database对象
//获取写入参数对象
ContentValues values = new ContentValues();
//将要传入的参数以键值对的方式写入参数对象
values.put();
writableDatabase.insert(<1>,<2>,<3>);
参数分别为:表名,第三个参数为空时的默认字段名,ContentValues对象
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

//获取写入database对象
writableDatabase.delete(<1>,<2>,<3>);
//参数分别为:表名,where语句,参数数组
writableDatabase.delete(TABLE_NAME,"where name = ?",new String[]{"zhangsan"});
//删除全部内容
writableDatabase.delete(TABLE_NAME,"1=1",null);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

//获取写入database对象
ContentValues values = new ContentValues();
values.put();
//参数分别为:表名,写入参数对象,where语句,参数数组
writableDatabase.update(TABLE_NAME,values,"name = ?",new String[]{"zhangsan"});
  • 1
  • 2
  • 3
  • 4
  • 5

//获取读取database对象
//查询所有记录时:第一个参数为表名,其余为null,获得游标
Cursor cursor = readableDatabase.query(TABLE_NAME, );
//根据columnindex读取每一列的值
while (cursor.moveToNext()) {
	String name = cursor.getColumnName(0);
}

//根据条件查询时
query();
//其中的selection参数为"where name = ?" ,selectionArgs = 参数数组
//然后依然是获取游标,遍历
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

下方App Inspection栏可以看到运行应用中的数据库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/636299
推荐阅读
相关标签
  

闽ICP备14008679号