Android SQLite数据库彻底掌握数据存储

yizhihongxing

Android SQLite数据库彻底掌握数据存储

前言

Android是个流行的移动操作系统,许多App需要获取、存储和处理数据。SQLiteDatabase是一个轻量级的数据库技术,它可被嵌入在你的应用程序中,能够提供访问和保存数据的方法。本文将为你介绍如何在Android应用程序中彻底掌握SQLite数据库,包括创建和管理数据库、增删改查操作、以及如何使用ContentProvider来共享数据等。

创建和管理数据库

在Android应用程序中,我们可以使用SQLiteOpenHelper类来创建和管理SQLite数据库。SQLiteOpenHelper提供了以下方法:

  • onCreate():当数据库第一次被创建时,调用这个方法
  • onUpgrade():当数据库版本号增加时,调用这个方法

下面是一个创建数据库的示例:

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DB_NAME = "mydatabase.db";
    private static final int DB_VERSION = 1;

    private static final String CREATE_TABLE_SQL = "CREATE TABLE table_name (_id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";

    public MyDatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS table_name");
        onCreate(db);
    }
}

增删改查操作

在SQLite中,我们可以使用SQL语句来进行增删改查操作,具体操作如下:

插入数据

public void addData(SQLiteDatabase db, String name, int age) {
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.insert("table_name", null, values);
}

删除数据

public void deleteData(SQLiteDatabase db, String name) {
    db.delete("table_name", "name=?", new String[] {name});
}

更新数据

public void updateData(SQLiteDatabase db, String name, int age) {
    ContentValues values = new ContentValues();
    values.put("age", age);
    db.update("table_name", values, "name=?", new String[] {name});
}

查询数据

public List<Person> queryData(SQLiteDatabase db) {
    List<Person> list = new ArrayList<>();
    Cursor cursor = db.query("table_name", null, null, null, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        do {
            Person person = new Person();
            person.setId(cursor.getInt(cursor.getColumnIndex("_id")));
            person.setName(cursor.getString(cursor.getColumnIndex("name")));
            person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            list.add(person);
        } while (cursor.moveToNext());
    }
    if (cursor != null) {
        cursor.close();
    }
    return list;
}

ContentProvider

ContentProvider是Android中的一个组件,它提供了一种标准化的方式来共享应用程序中的数据。ContentProvider和SQLiteOpenHelper结合使用,可以让你的应用程序轻松地将数据共享给其他应用程序。

下面是一个ContentProvider的示例:

public class MyContentProvider extends ContentProvider {
    private SQLiteDatabase db;

    private static final String AUTHORITY = "com.example.myprovider";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/table_name");

    @Override
    public boolean onCreate() {
        MyDatabaseHelper dbHelper = new MyDatabaseHelper(getContext());
        db = dbHelper.getWritableDatabase();
        return db != null;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        return db.query("table_name", projection, selection, selectionArgs, null, null, sortOrder);
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        db.insert("table_name", null, values);
        return uri;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        return db.delete("table_name", selection, selectionArgs);
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        return db.update("table_name", values, selection, selectionArgs);
    }
}

示例说明

示例1:创建数据库表格

下面是创建一个名为person的数据表,该表包含_id、name和age三列:

// 创建表格的SQL语句
private static final String CREATE_TABLE_SQL = "CREATE TABLE person (_id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";

// 在MyDatabaseHelper中的onCreate()方法中调用该方法:
db.execSQL(CREATE_TABLE_SQL);

示例2:增删改查操作

下面是一个对person表进行增删改查操作的示例:

// 增加一条新记录
public void addPerson(String name, int age) {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.insert("person", null, values);
    db.close();
}

// 删除指定name的记录
public void deletePerson(String name) {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    db.delete("person", "name=?", new String[] {name});
    db.close();
}

// 修改指定name的记录
public void updatePerson(String name, int age) {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("age", age);
    db.update("person", values, "name=?", new String[] {name});
    db.close();
}

// 查询所有记录
public List<Person> queryAllPerson() {
    SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
    List<Person> list = new ArrayList<>();
    Cursor cursor = db.query("person", null, null, null, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        do {
            Person person = new Person();
            person.setId(cursor.getInt(cursor.getColumnIndex("_id")));
            person.setName(cursor.getString(cursor.getColumnIndex("name")));
            person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            list.add(person);
        } while (cursor.moveToNext());
    }
    if (cursor != null) {
        cursor.close();
    }
    db.close();
    return list;
}

以上就是Android SQLite数据库彻底掌握数据存储的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android SQLite数据库彻底掌握数据存储 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • mysql查询学生表里面成绩第2名的学生成绩

    如图:    多表关联写法:    

    MySQL 2023年4月13日
    00
  • MySQL8数据库安装及SQL语句详解

    MySQL8数据库安装及SQL语句详解 MySQL8数据库安装 要安装MySQL8数据库,可以按照以下步骤进行: 下载MySQL8的安装包。 官方下载地址:https://dev.mysql.com/downloads/mysql/ 安装MySQL8。 双击下载的mysql安装包,按照提示进行安装,过程中可以自行选择安装路径和配置。 设置root用户密码。 …

    database 2023年5月22日
    00
  • SQL SERVER中的流程控制语句

    下面是关于SQL Server中的流程控制语句的详细讲解。 什么是流程控制语句 流程控制语句是一种编程语言用于控制程序执行流程的语句。在SQL Server中,也存在特定的流程控制语句,用于控制存储过程、触发器等对象的执行流程。 SQL SERVER中的流程控制语句类型 SQL Server中的流程控制语句主要包括以下类型: IF…ELSE…:用于根…

    database 2023年5月21日
    00
  • 如何在Python中插入MongoDB数据库中的数据?

    以下是在Python中插入MongoDB数据库中的数据的完整使用攻略。 使用MongoDB数据库的前提条件 在使用Python连接MongoDB数据库之前,确保已经安装了MongoDB数据库,并已经创建使用数据库和集合,同时需要安装Python的驱动,例如pymongo。 步骤1:导入模块 在Python中使用pymongo模块连接MongoDB数据库。以下…

    python 2023年5月12日
    00
  • redis开发使用规范

    1、冷热数据分离,不要将所有数据全部都放在Redis中     根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数据可以使用mysql等基于磁盘的存储方式。     不仅节省内存成本,而且数据量小操作时速度更快,效率更高。 2、不同的业务数据要分开存储     不要将不相关的业务数据都放到一个Redis实例中,建议新业务申请新的单独…

    Redis 2023年4月13日
    00
  • 在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)

    当需要在Linux系统中将SQL文件导入到MySQL数据库中时,可以使用命令行进行转移。下面是完整的攻略: 1. 准备工作 在开始之前,确保已经安装了MySQL数据库,并且已经熟悉Linux系统的基本命令。 2. 创建数据库 首先,需要创建一个新的MySQL数据库。可以使用以下命令创建一个名为mydatabase的数据库: CREATE DATABASE m…

    database 2023年5月22日
    00
  • SQL 中 DROP 和 TRUNCATE 的区别

    下面是SQL中DROP和TRUNCATE的区别的完整攻略: DROP和TRUNCATE的定义 DROP和TRUNCATE都是SQL中常用的删除表数据的操作语句。但是二者的作用和使用方法略有不同。 DROP是一种完全删除表的结构,包括所有关联的约束和索引,数据会被永久删除,不能恢复。 TRUNCATE删除表的数据,但是不删除表的结构、约束和索引等其他属性,数据…

    database 2023年3月27日
    00
  • sql server关键字详解大全(图文)

    SQL Server关键字详解大全 SQL Server 是一款非常流行的关系型数据库管理系统,其中包含大量的关键字,每个关键字都具有不同的作用和用法。本文将为大家详细讲解 SQL Server 中常见的关键字以及它们的用法。 1. SELECT SELECT 是 SQL 中用来查询数据的关键字。它可以从一个或多个表中检索出要显示的数据列,可以通过 WHER…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部