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

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日

相关文章

  • 详解Redis list列表使用方法

    Redis list(列表)相当于 Java 语言中的 LinkedList 结构,是一个链表而非数组,其插入、删除元素的时间复杂度为 O(1),但是查询速度欠佳,时间复杂度为 O(n)。 认识Redis List列表 Redis List是一个可以存储多个有序字符串的数据结构,他的底层是一个链表。我们可以通过左右两端追加、裁剪、查看元素,还可以通过列表的一…

    Redis 2023年3月18日
    00
  • centos 7系统下安装laravel运行环境的步骤详解

    接下来我将详细讲解在CentOS 7系统下安装Laravel运行环境的步骤,其中包含以下几个步骤: 步骤一:安装Apache和PHP 首先,我们需要安装Apache以及PHP。我们可以通过以下命令来安装: sudo yum install httpd php php-mysql 安装完毕后,启动Apache服务: sudo systemctl start h…

    database 2023年5月22日
    00
  • MySQL中Case When用法及说明

    MySQL中的CASE WHEN语句是一种非常有用的控制流语句,它允许我们根据条件表达式的结果来执行不同的操作。在本文中,我将详细讲解CASE WHEN的用法及说明。 基本语法 CASE WHEN语句的一般格式如下: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 … WHEN…

    database 2023年5月22日
    00
  • 详解使用Redis都有哪些安全策略?

    Redis的安全策略包括认证、网络隔离、数据加密等措施,可以有效保障Redis的安全与可靠性。本篇文章将为大家详细讲解Redis安全策略的完整攻略,让大家能够更好地了解和使用Redis进行开发。 Redis认证 Redis提供了简单的认证机制,可以通过设置密码来保护Redis服务的访问权限。密码设置与认证过程如下: 密码设置过程 打开redis.conf文件…

    Redis 2023年3月18日
    00
  • 离线安装redis集群

      Step0:redis集群组件需求 Step1:离线安装ruby Step2:离线安装rubygems Step3:安装rubygems的 redis api Step4:离线安装tcl 8.6 Step5:离线安装redis Step6:启动redis守护进程及配置主从复制 Step7:测试redis集群     Step0:redis集群需要安装如下…

    Redis 2023年4月12日
    00
  • mysql中key 、primary key 、unique key 与index区别

    CREATE TABLE pre_forum_post ( pid int(10) unsigned NOT NULL COMMENT ‘帖子id’, fid mediumint(8) unsigned NOT NULL default ‘0’ COMMENT ‘论坛id’, tid mediumint(8) unsigned NOT NULL defaul…

    MySQL 2023年4月13日
    00
  • 如何实现千万级优惠文章的优惠信息同步

    金融社区优惠文章是基于京东商城优惠商品批量化自动生成的,每日通过不同的渠道获取到待生成的SKU列表,并根据条件生成优惠文章。 但是,生成优惠文章之后续衍生问题:该商品无优惠了,对应文章需要做取消推荐或下架处理,怎样能更快的知道该商品无优惠了呢? 作者:京东科技 文涛 背景 金融社区优惠文章是基于京东商城优惠商品批量化自动生成的,每日通过不同的渠道获取到待生成…

    Redis 2023年4月10日
    00
  • Mysql常用函数大全(分类汇总讲解)

    Mysql中常用函数有很多,按照不同的功能可以分为不同的类别。以下是一份常用函数的分类汇总及讲解,旨在帮助读者熟练掌握Mysql函数的使用。 文本处理函数 这类函数用于处理文本字符串,包括字符串长度、查找、替换、连接等操作。常用函数包括: LENGTH(str): 获取字符串str的长度,字符长度为1,中文长度为3。 CONCAT(str1,str2,……

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