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);

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) {

    }
}

7.2.4 增删改查的方法

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

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

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

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

//根据条件查询时
query();
//其中的selection参数为"where name = ?" ,selectionArgs = 参数数组
//然后依然是获取游标,遍历

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值