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日

相关文章

  • Spring Boot 条件注解详情

    下面是关于Spring Boot条件注解的详细攻略: 1. 条件注解的概述 Spring Boot 的条件注解可以使得我们能够根据给定的条件来控制 Bean 是否被创建。在 Spring Boot 中一共有 @ConditionalOnBean、@ConditionalOnClass、@ConditionalOnMissingBean、@Conditiona…

    database 2023年5月22日
    00
  • Mysql数据库错误代码中文详细说明

    下面是详细讲解“Mysql数据库错误代码中文详细说明”的完整攻略。 简介 MySQL是一款开源的关系型数据库管理系统,被广泛应用于Web应用程序的开发中。在使用过程中难免会遇到各种各样的错误,Mysql为开发者提供了丰富的错误代码以方便开发者快速定位错误,本文将详细介绍Mysql数据库错误代码中文详细说明。 错误代码说明 Mysql中的错误代码分为多个类型,…

    database 2023年5月21日
    00
  • eXtremeDB 6.0正式发布:提高扩展性和分布式查询速度

    “eXtremeDB 6.0正式发布: 提高扩展性和分布式查询速度”攻略 什么是eXtremeDB? eXtremeDB是一款内存数据库管理系统,旨在提供高速、可扩展、可靠的数据管理解决方案。它具有多种用途和应用场景,例如网络路由、物联网、金融、电信、航空、游戏等领域。 eXtremeDB 6.0发布 eXtremeDB 6.0通过提高扩展性和分布式查询速度…

    database 2023年5月19日
    00
  • 深入分析PHP优化及注意事项

    深入分析PHP优化及注意事项 PHP是一种流行的服务器端编程语言,然而,在应用程序较大而复杂的情况下,它的性能可能会受到影响。在本篇文章中,我将介绍一些PHP优化技术和注意事项,帮助你更好地提升PHP应用程序的性能。 1. 使用OPcache OPcache是一个免费的开源PHP缓存扩展,可以在服务器端缓存并预编译PHP脚本。OPcache能够避免每次请求时…

    database 2023年5月21日
    00
  • Linux – mysql 异常:登录不上mysql数据库

    问题描述 重启虚拟机之后,用命令 mysql -u root -p 登录不上 mysql 数据库,页面显示: 但是,用命令 service mysqld status 可以查看状态   解决方案 1、查看 mysql 相关的 pid 命令:ps -ef|grep mysql   2、杀死相关进程 kill -9 2568 kill -9 2454   3、重…

    MySQL 2023年4月13日
    00
  • 详解MySQL 查询语句的执行过程

    下面我将为您详细讲解“详解MySQL 查询语句的执行过程”的完整攻略。 MySQL 查询语句执行过程的概述 MySQL 查询语句的执行过程是一个复杂的过程,而且不同的查询语句执行过程会有所不同。一般情况下,MySQL 查询语句执行的基本过程如下: 语法分析器(Parser):MySQL 会先对查询语句进行语法分析,判断该语句是否符合 MySQL 的语法规范。…

    database 2023年5月21日
    00
  • Linux系统下导出ORACLE数据库出现Exporting questionable statistics.错误 处理

    当在Linux系统下导出ORACLE数据库时,有时会遇到 “Exporting questionable statistics” 错误。这是由于预估统计信息方面的问题,在导出时数据库无法确认统计信息的准确性,导致出现该错误。针对这种情况,可以使用以下攻略进行处理: 1.使用IGNORE=Y参数忽略错误 在执行expdp命令时,可以使用 IGNORE=Y 参数…

    database 2023年5月22日
    00
  • mysql中常用日期比较与计算函数

    MySQL是一种非常流行的数据库管理系统,它提供了许多处理日期和时间的函数。下面我将为你详细讲解MySQL中常用日期比较与计算函数的使用方法。 函数介绍 MySQL中常用的日期比较与计算函数包括日期比较函数和日期计算函数。下面是这些函数的具体介绍: 日期比较函数 1. 日期比较函数DATEDIFF() DATEDIFF()函数用于计算两个日期之间相差的天数。…

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