SQLite数据库在Android中的使用

news2024/12/23 13:14:59

目录

一,SQLite简介

二,SQLIte在Android中的使用

1,打开或者创建数据库

2,创建表

3,插入数据

4,删除数据

5,修改数据

 6,查询数据

三,SQLiteOpenHelper类

四,SQLite中事务的处理


一,SQLite简介

        SQLite是一个无服务器的零配置的事务性的SQL数据库引擎。无服务器,意味着使用sqlite不需要联网;不需要配置,意味着不需要安装和管理;同时sqlite遵循ACID原则。SQLIte是一款轻型的数据库,占用资源非常低,在嵌入式设备中,可能只需几百k的内存。

二,SQLIte在Android中的使用

        Android中使用SQLiteDatabase代表数据库,并提供了一系列方法来操作数据库。对于常用的增删改查操作,既可以使用execSQL()方法直接执行sql语句,也可以使用Android提供的方法,由于execSQL()方法返回void,无法判断是否执行成功,所以除创建表之外的操作通常使用Android提供的一系列方法。

1,打开或者创建数据库

        使用openOrCreateDatabase()打开或者创建一个数据库,如果数据库存在则打开数据库,反之则创建一个数据库。创建成功则返回SQLiteDatabase对象,否则抛出异常。使用时需提供创建路径和一个游标工厂;

private void initDatabase() {
    String filePath = getFilesDir().getAbsolutePath() + "wordDB.db";
    DB = SQLiteDatabase.openOrCreateDatabase(filePath, null);
    Log.i("DB", "数据库初始化成功!");
}

2,创建表

表的创建可以通过SQLiteDatabase的exexSQL()方法直接执行sql语句来创建;

private void inittable() {
    String table = "create table tb_word(" +
            "id integer primary key autoincrement," +
            "word varchar(20) not null," +
            "translation varchar(20) not null);";
    DB.execSQL(table);
}

3,插入数据

  1. table:所要执行的表名;
  2. nullColumnHack:在此处指定一个列名,当数据为空时,会向该列插入一个null。一般设为null;
  3. values:要插入的内容;
private void insert() {
    //所要插入的数据
    ContentValues contentValues = new ContentValues();
    contentValues.put("word", word);
    contentValues.put("translation", translation);
    //执行插入
    long id = wordDB.insert("tb_word", null, contentValues);
    if(id > 0){
        Toast.makeText(this, "录入成功!", Toast.LENGTH_SHORT).show();
    }
}

4,删除数据

  1.  table:表名;

  2. whereClause:修改条件,也就是sql语句中where后的内容,可以使用占位符,如"id=?";

  3. whereArgs:修改条件参数,当whereClause使用占位符时,在此处填入条件参数,形式为字符串数组;

private void delete() {
    //删除条件
    String whereClause = "word = ?";
    //删除条件参数
    String[] whereArgs = {String.valueOf(words.getWord())};
    //执行删除
    int row = wordDB.delete("tb_word", whereClause, whereArgs);
    if(row > 0){
        Log.i("delete", "删除成功");
    }else {
        Log.i("delete", "删除失败");
    }
}

5,修改数据

  1. table:表名;
  2. values:修改的内容;
  3. whereClause:修改的条件,与delete的一致;
  4. whereArgs:修改条件参数; 
private void update(){
    //修改的内容
    ContentValues values = new ContentValues();
    values.put("translation", translation);
    //修改条件
    String whereClause = "word=?";
    //修改条件参数
    String[] whereArgs = {word};
    //执行修改
    int row = wordDB.update("tb_word", values, whereClause, whereArgs);
    if(row > 0){
        Log.i("update", "更新成功");
    }else {
        Log.i("update", "更新失败");
    }
}

 6,查询数据

        在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。

  1. table:表名;
  2. columns:列名称数组,指定从哪些列寻找;
  3. selection:查询的条件,相当于where后的内容;
  4. selectionArgs:查询条件的参数;
  5. groupBy:分组列;
  6. having:分组条件;
  7. orderBy:排序列;
  8. limit:分页查询限制;

Cursor游标类常用方法:

private void searchWord() {
    //查询条件
    String selection = "word=?";
    //查询条件参数
    String[] selectionArgs = { String.valueOf(word) };
    //执行查询,获取游标类
    Cursor cursor = wordDB.query("tb_word", null, selection, selectionArgs , null, null, null);
    StringBuffer result = new StringBuffer();
    while(cursor.moveToNext()){
        int idOfWord = cursor.getColumnIndex("word");
        String word1 = cursor.getString(idOfWord);
        int idOfTranslation = cursor.getColumnIndex("translation");
        String translation = cursor.getString(idOfTranslation);
        result.append(word1 + ": " + translation + "\n");
    }
    tv_words.setText(result.toString());
}

三,SQLiteOpenHelper类

        Android提供SQLiteOpenHelper类来管理数据库。主要负责数据库的创建版本更新,一般情况通过创建它的子类并扩展onCreate()onUpgrade()方法来实现。 

SQLiteOpenHelper类常用方法:

  1. abstract void onCreate():第一次创建数据库时回调;
  2. abstract void onUpgrade():数据库版本更新时回调;
  3. SQLiteDatabase  getWritableDatabase():获得可读/写的数据库;
  4. SQLiteDatabase  getReadableDatabase():获得可读的数据库;
  5. void close():关闭所有打开的SQLiteDatabase;

 (1)创建SQLiteOpenHelper的子类,并重写方法:

public class MySqliteHelper extends SQLiteOpenHelper {

    public MySqliteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String table = "create table tb_word(" +
                "id integer primary key autoincrement," +
                "word varchar(20) not null," +
                "translation varchar(20) not null);";
        db.execSQL(table);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

(2)通过子类来创建数据库:

private void initDatabaseHelper() {
    mySqliteHelper = new MySqliteHelper(
            this,
            "wordDB.db",
            null,
            1
    );

    SQLiteHelperUtil.wordDB = mySqliteHelper.getWritableDatabase();
    Log.i("wordDB", "数据库初始化成功!");
}

四,SQLite中事务的处理

SQLite采用如下方法来处理事务:

  1. beginTransaction():开启事务;
  2. setTransactionSuccessful():标记事务成功;
  3. endTransaction():提交事务,当事务执行失败时,可调用此方法回滚事务;
db.beginTransaction();
try {
        // 执行事务中的sql语句
        db.setTransactionSuccessful();
} finally {
        db.endTransaction();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信弘智能与图为科技共探科技合作新蓝图

本期导读 近日,图为信息科技(深圳)有限公司迎来上海信弘智能科技有限公司代表的到访,双方共同探讨英伟达生态系统在人工智能领域的发展。 在科技日新月异的今天,跨界合作与技术交流成为了推动行业发展的重要驱动。7月…

使用JWT双令牌机制进行接口请求鉴权

在前后端分离的开发过程中,前端发起请求,调用后端接口,后端在接收请求时,首先需要对收到的请求鉴权,在这种情况先我们可以采用JWT机制来鉴权。 JWT有两种机制,单令牌机制和双令牌机制。 单令牌机制服务端…

JAVA 异步编程(线程安全)二

1、线程安全 线程安全是指你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码,如果每次运行的代码结果和单线程运行的结果是一样的,且其他变量的值和预期的也是一样的,那么就是线程安全的。 一个类或者程序…

Linux驱动开发-06蜂鸣器和多组GPIO控制

一、控制蜂鸣器 1.1 控制原理 我们可以看到SNVS_TAMPER1是这个端口在控制着蜂鸣器,同时这是一个PNP型的三极管,在端口输出为低电平时,蜂鸣器响,在高电平时,蜂鸣器不响 1.2 在Linux中端口号的控制 gpiochipX:当前SoC所包含的GPIO控制器,我们知道I.MX6UL/I.MX6ULL一共包…

整顿职场?安全体系建设

本文由 ChatMoney团队出品 00后整顿职场,职场到底怎么了?无压力、无忧虑的00后可以直接开整,那绝大部分打工人寒窗苦读、闯过高考,艰辛毕业,几轮面试杀入职场,结婚买房、上有老下有小,就活该再被…

怎么剪辑音频文件?4款适合新的音频剪辑软件

是谁还不会音频剪辑?无论是个人音乐爱好者,还是专业音频工作者,我们都希望能找到一款操作简便、功能强大且稳定可靠的音频剪辑工具。今天,我就要为大家带来四款热门音频剪辑软件的体验感分享。 一、福昕音频剪辑 福昕音频剪辑是…

JUnit 单元测试

JUnit 测试是程序员测试,就是白盒测试,可以让程序员知道被测试的软件如何 (How)完成功能和完成什么样(What)的功能。 下载junit-4.12和hamcrest-core-1.3依赖包 相关链接 junit-4.12:Central …

【JavaScript 算法】最长公共子序列:字符串问题的经典解法

🔥 个人主页:空白诗 文章目录 一、算法原理状态转移方程初始条件 二、算法实现注释说明: 三、应用场景四、总结 最长公共子序列(Longest Common Subsequence,LCS)是字符串处理中的经典问题。给定两个字符串…

Go语言之参数传递

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 修改参数 假设你定义了一个函数,并在函数里对参数进行…

string相关

int main() {// world替换成 xxxxxxxxxxxxxxxxxxxxxxstring s1("hello world hello bit");s1.replace(6, 5, "xxxxxxxxxxxxxxxxxxxxxx");cout << s1 << endl;s1.replace(6, 23, "yyyyy");cout << s1 << endl;// 所有空格…

C++ | Leetcode C++题解之第260题只出现一次的数字III

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> singleNumber(vector<int>& nums) {int xorsum 0;for (int num: nums) {xorsum ^ num;}// 防止溢出int lsb (xorsum INT_MIN ? xorsum : xorsum & (-xorsum));int type1 0, …

类和对象:构造函数

构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但是构造函数的主要任务并不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时&#xff0c;空间就开好了)&#xff0c;⽽是对象实例化时初始化对象。构造函数的本质是要替代…

通过splunk web服务将服务器上文件下载到本地

1. 需求说明 工作中经常遇到需要将服务器上的文件下载到本地&#xff0c;但是由于各种网络环境限制&#xff0c;没办法使用winscp或者xftp工具&#xff0c;那么如何将服务器上的文件下载下来呢&#xff1f; 这里提供一种思路: 如果服务器上安装有web服务&#xff0c;可将待下…

MongoDB教程(十四):MongoDB查询分析

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、查询分…

防火墙之内容安全过滤技术篇

深度行为检测技术&#xff1a;是一种基于应用层的流量检测和控制技术 DPI:针对完整的数据包&#xff0c;进行内容的识别和检测 基于应用网关的检测技术 --- 有些应用控制和数据是分离的&#xff0c;比如一些视频流。一开始会通过TCP协议链接之后&#xff0c;协商一些参数&#…

扩容升级丨极海正式推出G32A1465系列汽车通用MCU,驱动智驾再进阶

继2023年推出G32A系列汽车通用平台首发产品G32A1445系列后&#xff0c;极海宣布正式推出G32A1465系列全新汽车通用MCU&#xff0c;以满足日益增长的智能驾驶应用需求。作为升级迭代产品&#xff0c;G32A1465专为应用范围不断扩大的高运算要求而设计&#xff0c;集成丰富的通信接…

服务器证书基于 OpenSSL一键颁发脚本

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

【Vue】深入了解 Axios 在 Vue 中的使用:从基本操作到高级用法的全面指南

文章目录 一、Axios 简介与安装1. 什么是 Axios&#xff1f;2. 安装 Axios 二、在 Vue 组件中使用 Axios1. 发送 GET 请求2. 发送 POST 请求 三、Axios 拦截器1. 请求拦截器2. 响应拦截器 四、错误处理五、与 Vuex 结合使用1. 在 Vuex 中定义 actions2. 在组件中调用 Vuex acti…

Elasticsearch:Retrievers 介绍 - Python Jupyter notebook

在今天的文章里&#xff0c;我是继上一篇文章 “Elasticsearch&#xff1a;介绍 retrievers - 搜索一切事物” 来使用一个可以在本地设置的 Elasticsearch 集群来展示 Retrievers 的使用。在本篇文章中&#xff0c;你将学到如下的内容&#xff1a; 从 Kaggle 下载 IMDB 数据集…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-21 VTC视频时序控制器设计

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…