Android学习之轻量级数据库SQLite

article/2025/10/6 19:05:42

Android中对数据的存储有很多种方式,Google为Andriod中较大的数据处理提供了SQLite数据库,SQLite是一款轻型的数据库,它在管理、使用和维护上非常强大。当然最主要的特点还是它的轻量级,适合在移动设备上使用。

今天主要来讲下最基本的SQLite数据库使用,让大家更了解SQLite一点。当然本人对SQLite的使用也是比较肤浅的,呵呵。

首先创建1个实体类来操作数据:

/**
 * 人
 *
 * @author yuzhentao
 */
public class Person {public int _id;
    public String name;
    public String age;

    public Person() {}public Person(String name, String age) {this.name = name;
        this.age = age;
    }}
然后是常量类,主要放了数据库名,因为接下来经常要使用:

/**
 * 常量
 *
 * @author yuzhentao
 */
public class Constants {public static final String TABLE_NAME_PERSON = "person";

}
Android中数据库的创建主要使用SQLiteOpenHelper,它是Android提供给我们一个数据库辅助类,用来创建或打开数据库。

所以创建一个类来继承SQLiteOpenHelper:

/**
 * 数据库帮助器
 *
 * @author yuzhentao
 */
public class DBHelper extends SQLiteOpenHelper {private static SQLiteDatabase db = null;
    private static final String DATABASE_NAME = "person.db";
    private static final int DATABASE_VERSION = 1;

    public DBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }@Override
    public void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists " + Constants.TABLE_NAME_PERSON + " (_id integer primary key autoincrement, name text, age text)");
    }@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("alter table person add column other string");
    }/**
     * 获取打开的本地数据库
     *
     * @param context:Context
     * @return SQLiteDatabase
     */
    public static synchronized SQLiteDatabase getOpenedDB(Context context) {if (db == null) {DBHelper dbHelper = new DBHelper(context.getApplicationContext());
            db = dbHelper.getWritableDatabase();
        }return db;
    }/**
     * 关闭本地数据库
     */
    public static void closeDB() {if (db != null) {db.close();
            db = null;
        }}}
onCreate()中创建数据库,onUpgrade()中更新数据库,getWritableDatabase()可以获取数据库实例。

数据库的操作主要是增删改查,相信大家都知道,我们可以使用数据库语言来对数据库进行操作,同时也可以使用SQLite提供的方法来做这些操作,所以我们一般会创建一个数据库管理器来对数据库进行操作:

/**
 * 数据库管理器
 *
 * @author violetjack
 */
public class DBManager {private SQLiteDatabase db;
    private static DBManager DBManager;

    public DBManager(Context context) {db = DBHelper.getOpenedDB(context);
    }public static DBManager getInstance(Context context) {if (DBManager == null) {DBManager = new DBManager(context.getApplicationContext());
        }return DBManager;
    }/**
     * 添加数据
     *
     * @param person:Person
     */
    public void add(Person person) {db.beginTransaction();
        try {db.execSQL("insert into " + Constants.TABLE_NAME_PERSON + " values (null, ?, ?)",
                    new Object[]{person.name, person.age});
            db.setTransactionSuccessful();
        } finally {db.endTransaction();
        }}/**
     * 根据ID删除数据
     *
     * @param id:时间
     */
    public void delete(int id) {db.delete(Constants.TABLE_NAME_PERSON, "_id = ?", new String[]{String.valueOf(id)});
    }/**
     * 清空数据
     */
    public void clear() {db.delete(Constants.TABLE_NAME_PERSON, "", new String[]{});
    }/**
     * 根据ID更新数据
     *
     * @param _id:ID
     * @param person:Person
     */
    public void update(int _id, Person person) {ContentValues cv = new ContentValues();
        cv.put("name", person.name);
        cv.put("age", person.age);
        db.update(Constants.TABLE_NAME_PERSON, cv, "_id = ?", new String[]{String.valueOf(_id)});
    }/**
     * 根据ID更新某个字段
     *
     * @param _id:ID
     * @param key:键
     * @param value:值
     */
    public void update(int _id, String key, String value) {ContentValues cv = new ContentValues();
        cv.put(key, value);
        db.update(Constants.TABLE_NAME_PERSON, cv, "_id = ?", new String[]{String.valueOf(_id)});
    }/**
     * /**
     * 查询数据
     *
     * @return ArrayList<Person>*/
    public ArrayList<Person> query() {ArrayList<Person> personList = new ArrayList<>();
        Cursor c = queryCursor(Constants.TABLE_NAME_PERSON);
        while (c.moveToNext()) {Person person = new Person();
            person._id = c.getInt(c.getColumnIndex("_id"));
            person.name = c.getString(c.getColumnIndex("name"));
            person.age = c.getString(c.getColumnIndex("age"));
            personList.add(person);
        }c.close();
        return personList;
    }/**
     * 查询指针
     *
     * @param tableName:表名
     * @return Cursor
     */
    public Cursor queryCursor(String tableName) {return db.rawQuery("select * from " + tableName, null);
    }}
怎么使用大家看代码就行,接下来是主界面中使用这些方法:

/**
 * 主界面
 *
 * @author yuzhentao
 */
public class MainActivity extends Activity implements View.OnClickListener {private Context context;

    private DBManager dbManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }@Override
    protected void onDestroy() {super.onDestroy();
        DBHelper.closeDB();
    }@Override
    public void onClick(View v) {int viewId = v.getId();
        switch (viewId) {case R.id.button_add_activity_main:dbManager.add(new Person("A", "20"));
                Toast.makeText(context, "增加一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_delete_activity_main:dbManager.delete(1);
                Toast.makeText(context, "删除一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_update_activity_main:dbManager.update(5, new Person("B", "20"));
                Toast.makeText(context, "更新一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_query_activity_main:for (Person person : dbManager.query()) {Log.e("yuzhentao", "name=" + person.name + ",age=" + person.age);
                }Toast.makeText(context, "查询一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_clear_activity_main:dbManager.clear();
                Toast.makeText(context, "清空数据", Toast.LENGTH_SHORT).show();
                break;
        }}private void initView() {context = this;
        findViewById(R.id.button_add_activity_main).setOnClickListener(this);
        findViewById(R.id.button_delete_activity_main).setOnClickListener(this);
        findViewById(R.id.button_update_activity_main).setOnClickListener(this);
        findViewById(R.id.button_query_activity_main).setOnClickListener(this);
        findViewById(R.id.button_clear_activity_main).setOnClickListener(this);
        dbManager = DBManager.getInstance(getApplicationContext());
    }}
一共有5个按钮,分别对应5增删改查和清空5种操作,其实清空也就是删除所有数据,更新可以更新某个字段,也可以更新所有字段。在onCreate()中获取数据库管理器的实例顺便打开数据库,别忘记在onDestroy()中关闭数据库。

这里我手机经过Root,然后通过某软件就可以看到数据库,大家可以看下点击按钮的效果:




查询就通过Log来看下:

03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=B,age=20

Demo地址:http://download.csdn.net/detail/qq_23940659/9468587



http://chatgpt.dhexx.cn/article/EDAhaW6u.shtml

相关文章

收藏!Python内置的轻量级数据库竟如此好用!全网最实用sqlite3实战项目。

前段时间推送了一篇Python操作MySQL数据库的文章&#xff1a;我用 Python 处理3万多条数据&#xff0c;只要几秒钟……&#xff0c;文章发布后反应很好&#xff0c;很多粉丝给我私信&#xff0c;有的朋友说&#xff1a;MySQL安装起来太麻烦了&#xff0c;有没有更简便的方法&am…

SQLTools: 一款全功能的 VScode 轻量级数据库管理插件

公众号关注 「奇妙的 Linux 世界」设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; VSCode SQLTools 是一个非常轻量级的数据库管理插件&#xff0c;可以在 VSCode 中轻松管理数据库连接、查询、SQL语句智能提示、书签、查询历史等等&#xff0c;常用的管理功能都有。…

c#中使用轻量级数据库sqlite开发总结

首先简单说明下含义&#xff0c;sqlite数据库是一种轻量级的数据库&#xff0c;主要特点是免安装、免配置、简单小巧&#xff0c;在程序中的开发基本和sql数据库一致。 准备工具&#xff1a;system.data.sqlite.dll和sqlite-shell-win32-x86-3081101&#xff0c;前者用来在程序…

最近发现的 3 个 Python 轻量级数据库,好用到爆!

你好&#xff0c;我是征哥&#xff0c;在写程序的时候经常会需要将数据保存到本地&#xff0c;比如是配置文件&#xff0c;或者是中间过程数据&#xff0c;通过情况下我会选择 json、pickle 或者 sqlite。但是他们都有点不大方便。 比如 json 和 pickle&#xff0c;需要先序列化…

sqlite原理分析和开发应用

概述 SQLite介绍 自几十年前出现的商业应用程序以来&#xff0c;数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样&#xff0c;它们也变得非常庞大&#xff0c;并占用了相当多的系统资源&#xff0c;增加了管理的复杂性。随着软件应用程序逐渐模块模块…

SQLite3-轻量级数据库

SQLite主页&#xff1a;SQLite Home Page SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使…

Wise Duplicate Finder(重复文件查找工具)v1.2.9.40中文免费版

Wise Duplicate Finder是一款简洁高效的重复文件管理工具&#xff0c;通过匹配文件名&#xff0c;文件大小或内容来查找和删除重复的文件&#xff0c;使用户摆脱烦人的重复文件&#xff0c;释放更多磁盘空间&#xff0c;有需要的赶快下载吧&#xff01; 功能介绍&#xff1a; …

如何查找和删除Endnote中重复的文献

点击Reference&#xff0c;在列表中找到“Find Duplicates”

Linux命令模糊查找

1&#xff0c;在某文件夹下查找&#xff0c;且模糊匹配 find . -name xx* 且中间都必须用空格间隔 2&#xff0c;mv 命令格式运行结果mv 文件名 文件名将源文件名改为目标文件名mv 文件名 目录名将文件移动到目标目录mv 目录名 目录名目标目录已存在&#xff0c;将源目录…

文件包含漏洞详解

文章目录 文件包含概述漏洞产生原因漏洞特点小知识文件包含函数includerequireinclude_oncerequire_once 文件包含示例pikachu靶场本地文件包含漏洞演示pikachu靶场远程文件包含漏洞演示文件包含漏洞的利用PHP伪协议&#xff08;文件包含漏洞常用的利用方法&#xff09;文件包含…

【操作系统实验】Ubuntu Linux 虚拟机文件查找相关命令

文章目录 whereishelpmanfindlocategrepwc管道 whereis 功能描述&#xff1a;寻找命令的二进制文件。 同时也会找到其帮助文件&#xff0c;主要功能是寻找一个命令所在的位置。和find相比&#xff0c;whereis查找的速度非常快。 语法&#xff1a; whereis [选项] [命令名称] …

用 Python 实现文件查找

用 Python 实现文件查找&#xff08;BIF实现及队列实现&#xff09; &#xff08;1&#xff09;利用内置函数实现文件查找 1、功能&#xff1a;返回用户输入的文件的绝对路径 2、设计思路&#xff1a; &#xff08;1&#xff09;用户输入在哪个盘进行查找&#xff08;2&#xf…

如何测试电脑软件重复或多,如何快捷找出电脑内的重复文件(两个工具)

我特喜欢收集各种软件和资料&#xff0c;但是时间久了&#xff0c;很多软件和资料之前下载过了&#xff0c;后来不记得了&#xff0c;又下载了&#xff0c;这样重复的非常多。还有&#xff0c;我喜欢备份文件&#xff0c;就算一些普通的文件&#xff0c;也会随手临时备份一下&a…

使用代码克隆检测功能查找重复代码

代码克隆是非常相似的独立代码片段。 在已开发一段时间的应用程序中&#xff0c;常会出现这种现象。 克隆提高了更改应用程序的难度&#xff0c;因为你必须找到并更新多个片段。 Visual Studio Ultimate 或 Visual Studio Premium 可帮助你查找代码克隆&#xff0c;以便你进行重…

计算机上的查找替换功能快速格式化,Excel 2016中使用查找替换功能应用技巧

大家知道Excel中有查找和替换这个功能,懂得按住【Ctrl+F】可以直接打开“查找”对话框,按住【Ctrl+H】直接打开“替换”对话框。但你真的很了解这个功能了吗? 在使用Excel的时候,对于其中的查找功能的使用基本是比不可少的,那Excel中都可以在哪里进行查找呀。下面说下在Ex…

虚拟化、文件系统、查找文件

文章目录 虚拟化虚拟化的概念安装KVM安装gustos了解并配置KVM网络桥接&#xff1a;NAT:仅主机(hostonly): 文件系统了解文件系统的概念&#xff1a;了解硬链接的概念&#xff1a;挂载文件系统&#xff1a; 查找文件&#xff1a; 虚拟化 虚拟化的概念 虚拟化≠虚拟机 虚拟化里…

Duplicate Cleaner Pro(电脑重复文件清理软件)官方中文版V5.15.0 | 重复文件查找王下载

Duplicate Cleaner Pro 是一款相当出色的电脑重复文件清理软件&#xff0c;有重复文件查找王的美誉&#xff0c;支持字节、MD5以及其他多种哈希算法等内容比对方式&#xff0c;主要功能就是帮助大家从计算机硬盘中深入快速扫描查找并删除重复的文件、音乐、视频、照片、文档以及…

python删除重复文件

使用场景 网上爬取的图片重复量太大&#xff0c;需要删除重复图片。 环境 python 3 hashilib 分析一下这个问题&#xff1a; 首先&#xff0c;文件个数非常多&#xff0c;手工查找是不现实的&#xff0c;再说&#xff0c;单凭我们肉眼&#xff0c;在几千张图片或文件里面找…

工具及方法 - 使用Total Commander来查找重名文件

我只是一个Total Commander的轻度使用者&#xff0c;主要使用的是打开多个窗口&#xff0c;可以方便的以标签形式切换。 还有&#xff0c;这个软件是免费的&#xff0c;只是免费版打开时多一步&#xff0c;要输入个数字验证。 今天在使用一个SDK时&#xff0c;要包含进很多头文…

在群晖中批量删除重复文件

安装“存储空间分析器”套件配置“重复文件候选”报告&#xff0c;并生成报告查看并下载报告用excel打开报告并筛选出需要删除的文件 IF(A2A1,1,"")上传文件到群晖&#xff0c;并配置计划任务 cat 文件路径 | xargs -I {} rm -f "{}"执行并删除计划任务提醒…