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日

相关文章

  • Ubuntu 14.04下mysql安装配置教程

    下面是详细的Ubuntu 14.04下mysql安装配置教程: 1. 安装步骤 1.1 更新软件源 进入终端,输入以下命令: sudo apt-get update 1.2 安装mysql-server 同样在终端中输入以下命令: sudo apt-get install mysql-server 在安装过程中,会提示设置root用户的密码。 1.3 下载m…

    database 2023年5月22日
    00
  • lettuce之springboot整合redis

    lettuce (采用netty,实例可以多个线程进行共享,线程安全) Redis有三个框架:Jedis,Redisson,Lettuce     Jedis:比较全面的提供了Redis的操作特性   Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列   Lettuce:…

    Redis 2023年4月13日
    00
  • 详解MySQL8.0 密码过期策略

    详解 MySQL 8.0 密码过期策略 在 MySQL 8.0 版本中,引入了一个新特性:密码过期策略。这个特性的作用是通过限制用户密码的有效期来增加数据库的安全性。本文将详细讲解 MySQL 8.0 密码过期策略的相关知识点及其实现方法。 密码过期策略的设置 通过在 MySQL 的配置文件中设置参数 default_password_lifetime,可以…

    database 2023年5月22日
    00
  • Python 连接Redis两中方式

    一.通过django里设置settings文件连接redis #1.settings添加 CACHES = { “default”: { “BACKEND”: “django_redis.cache.RedisCache”, “LOCATION”: “redis://192.168.8.102:6379/0”, “OPTIONS”: { “CLIENT_CL…

    Redis 2023年4月11日
    00
  • 详谈redis优化配置和redis.conf说明(推荐)

    Redis优化配置攻略 Redis作为一个高性能的key-value数据库,其优化是非常重要的。下面是Redis优化配置的攻略: 第一步:升级硬件 Redis是一个CPU密集型应用程序,因此,升级更好的CPU是加速Redis性能的一个简单方法。此外,还可以增加更多的内存、网络带宽等。 第二步:优化操作系统 设置最大文件打开数: ulimit -n 10000…

    database 2023年5月22日
    00
  • Excel文件 利用MySQL/Python 实现自动处理数据的功能

    在没有服务器存储数据,只有excel文件的情况下,如何利用SQL和python实现数据分析和数据自动处理的功能?尤其在excel处理数据特别麻烦或者数据量很大的时候,可以考虑使用下面的方法。 目录 问题描述: 解决方案: 一、SQL查询 二、SQL、python处理 三、python处理 四、优化python处理 1.手动执行代码 2.开机自动执行代码 对比…

    MySQL 2023年4月11日
    00
  • 关于MongoTemplate通过id查询为null的问题

    当使用MongoDB的Java驱动程序MongoTemplate时,如果使用findOne()方法通过id查询某个文档,可能会出现返回null的情况。那么这种现象背后的原因是什么,该怎样处理呢?下面是这个问题的完整攻略。 1. 问题原因 MongoTemplate的findOne()方法使用的是findById(),而findById()方法需要满足以下两个…

    database 2023年5月22日
    00
  • oracle查询锁表与解锁情况提供解决方案

    Oracle 查询锁表与解锁的情况提供解决方案 什么是锁表 在 Oracle 数据库中,锁是一种用于保护数据完整性和一致性的机制。当多个用户同时访问一个对象时,通过锁来保证对该对象的操作能够顺序执行,以避免产生不一致的结果。 锁分为共享锁和排他锁两种。共享锁允许并发读取,但不能进行写操作;排他锁则是独占模式,其他用户不能对该对象进行读写操作。 如果一个用户正…

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