【android开发-17】android中SQLite数据库CRUD详细介绍

1,SQLite数据库读写的操作步骤

在Android中,对SQLite数据库的操作主要包括以下步骤:

1,创建数据库:首先,您需要创建一个SQLite数据库。这可以通过在Android项目中创建一个新的类来实现,该类继承自SQLiteOpenHelper。在这个类中,您可以定义数据库名、版本号以及创建表的SQL语句。在创建数据库时,如果该数据库文件不存在,系统会调用onCreate方法来创建数据库文件,并返回一个Database对象。如果数据库文件已经存在,系统会直接打开这个数据库并返回一个Database对象。

2,创建表:在创建了数据库之后,您需要使用CREATE TABLE语句来创建表。在Android中,您可以在DatabaseHelper类中定义CREATE TABLE语句,并在onCreate方法中执行此语句来创建表。

3,插入数据:要向SQLite数据库中插入数据,您需要使用INSERT语句。INSERT语句可以在DatabaseHelper类中的方法中定义,并在需要插入数据时调用。在INSERT语句中,您需要指定要插入的表名、要插入的数据以及任何必要的条件。

4,读取数据:要读取SQLite数据库中的数据,您需要使用SELECT语句。SELECT语句可以在DatabaseHelper类中的方法中定义,并在需要读取数据时调用。在SELECT语句中,您需要指定要查询的表名、要返回的字段以及任何必要的条件。在查询数据之后,您需要关闭Cursor对象以释放资源。

5,更新数据:要更新SQLite数据库中的数据,您需要使用UPDATE语句。UPDATE语句可以在DatabaseHelper类中的方法中定义,并在需要更新数据时调用。在UPDATE语句中,您需要指定要更新的表名、要更新的数据以及任何必要的条件。

6,删除数据:要从SQLite数据库中删除数据,您需要使用DELETE语句。DELETE语句可以在DatabaseHelper类中的方法中定义,并在需要删除数据时调用。在DELETE语句中,您需要指定要删除的表名以及任何必要的条件。

7,关闭数据库:在完成所有数据库操作后,一定要记得关闭数据库连接。这可以通过调用Database对象的close方法来完成。
以上就是在Android中对SQLite数据库进行操作的基本步骤。

2,创建数据库
以下是在Android中创建数据库的参考代码:

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
  
public class DatabaseHelper extends SQLiteOpenHelper {  
    // 数据库名  
    private static final String DATABASE_NAME = "database.db";  
  
    // 数据库版本号  
    private static final int DATABASE_VERSION = 1;  
  
    // 定义数据库表名  
    public static final String TABLE_NAME = "table";  
  
    // 创建表的SQL语句  
    private String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +  
            "_id INTEGER PRIMARY KEY," +  
            "name TEXT," +  
            "age INTEGER" +  
            ");";  
  
    public DatabaseHelper(Context context) {  
        super(context, DATABASE_NAME, null, DATABASE_VERSION);  
    }  
  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        db.execSQL(CREATE_TABLE);  
    }  
  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        // 这里可以更新数据库表结构  
    }  
}

以上代码创建了一个名为"database.db"的SQLite数据库,并在其中创建了一个名为"table"的表。该表包含三个字段:“_id”(主键)、“name”(文本类型)和"age"(整数类型)。在onCreate方法中,调用execSQL方法执行CREATE TABLE语句来创建表。当需要更新数据库时,可以在onUpgrade方法中进行相应的操作。

注意:数据库文件存储在/data/data/package name/databases/目录下。

3,升级数据库

以下是在Android中升级数据库的参考代码:

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
  
public class DatabaseHelper extends SQLiteOpenHelper {  
    // 数据库名  
    private static final String DATABASE_NAME = "database.db";  
  
    // 数据库版本号  
    private static final int DATABASE_VERSION = 2;  
  
    // 定义数据库表名  
    public static final String TABLE_NAME = "table";  
  
    // 创建表的SQL语句  
    private String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +  
            "_id INTEGER PRIMARY KEY," +  
            "name TEXT," +  
            "age INTEGER" +  
            ");";  
  
    public DatabaseHelper(Context context) {  
        super(context, DATABASE_NAME, null, DATABASE_VERSION);  
    }  
  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        db.execSQL(CREATE_TABLE);  
    }  
  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        // 删除旧的表  
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);  
        // 创建新的表  
        onCreate(db);  
    }  
}

以上代码将删除旧的数据库表,并创建一个新的表来升级数据库。在onUpgrade方法中,调用execSQL方法执行DROP TABLE语句来删除旧的表,然后调用onCreate方法重新创建新的表。这样就可以实现数据库的升级。
SQLiteOpenHelper 构造函数的第四个参数表示当前数据库的版本号。只要传入比之前大的版本号,就可以让onUpgrade方法得到执行。

注意:如果如果数据库文件,例如database.db,已经存在,onCreate方法就不会再次执行,因此新添加的表就不会创建。

4,添加数据
在Android中,我们通常使用SQLite数据库来存储应用数据。以下是一个简单的示例,展示如何在Android中向SQLite数据库添加数据:

首先,我们需要创建一个数据库助手类,这个类继承了SQLiteOpenHelper。在这个类中,我们可以定义数据库的名称、版本号以及创建表的SQL语句。

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
  
public class DBHelper extends SQLiteOpenHelper {  
    // 数据库名  
    private static final String DATABASE_NAME = "database.db";  
  
    // 数据库版本号  
    private static final int DATABASE_VERSION = 1;  
  
    // 定义数据库表名  
    public static final String TABLE_NAME = "table";  
  
    // 创建表的SQL语句  
    private String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +  
            "_id INTEGER PRIMARY KEY," +  
            "name TEXT," +  
            "age INTEGER" +  
            ");";  
  
    public DBHelper(Context context) {  
        super(context, DATABASE_NAME, null, DATABASE_VERSION);  
    }  
  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        db.execSQL(CREATE_TABLE);  
    }  
  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        // 这里可以更新数据库表结构  
    }  
}

然后,我们可以创建一个新的方法来插入数据到数据库中:

public void insertData(String name, int age) {  
    SQLiteDatabase db = this.getWritableDatabase();  
    ContentValues values = new ContentValues();  
    values.put("_id", 1);  
    values.put("name", name);  
    values.put("age", age);  
    db.insert(TABLE_NAME, null, values);  
    db.close();  
}

在上述代码中,我们首先获取一个可写入的数据库实例,然后创建一个ContentValues对象来存储我们要插入的数据。我们使用ContentValues的put方法来添加数据,最后使用SQLiteDatabase的insert方法来插入数据。注意,每次插入数据后,我们都需要关闭数据库连接。

5,更新数据
在Android中,我们通常使用SQLite数据库来存储应用数据。如果需要更新数据库中的数据,我们可以使用SQLiteDatabase的update方法。以下是一个简单的示例,展示如何在Android中更新SQLite数据库中的数据:
我们可以创建一个新的方法来更新数据:

public void updateData(String name, int age, int id) {  
    SQLiteDatabase db = this.getWritableDatabase();  
    ContentValues values = new ContentValues();  
    values.put("name", name);  
    values.put("age", age);  
    db.update(TABLE_NAME, values, "_id = " + id, null);  
    db.close();  
}

在上述代码中,我们首先获取一个可写入的数据库实例,然后创建一个ContentValues对象来存储我们要更新的数据。我们使用ContentValues的put方法来添加数据,最后使用SQLiteDatabase的update方法来更新数据。注意,每次更新数据后,我们都需要关闭数据库连接。

注意:db.update的第三和第四参数来指定更新哪几行。

6,删除数据
在Android中,我们使用SQLite数据库来存储数据。如果你想从数据库中删除数据,你可以使用SQLiteDatabase的delete方法。以下是一个简单的示例,展示如何在Android中删除SQLite数据库中的数据:
我们可以创建一个新的方法来删除数据:

public void deleteData(int id) {  
    SQLiteDatabase db = this.getWritableDatabase();  
    db.delete(TABLE_NAME, "_id = " + id, null);  
    db.close();  
}

在上述代码中,我们首先获取一个可写入的数据库实例,然后使用SQLiteDatabase的delete方法来删除数据。注意,每次删除数据后,我们都需要关闭数据库连接。

7,查询数据

我们可以创建一个方法来执行查询:

public Cursor queryData(String sql) {  
    SQLiteDatabase db = this.getReadableDatabase();  
    Cursor cursor = db.rawQuery(sql, null);  
    return cursor;  
}

你可以使用上面的方法来执行你的SQL查询。这个方法会返回一个Cursor对象,你可以使用这个对象来获取查询结果。例如:

Cursor cursor = dbHelper.queryData("SELECT * FROM " + TABLE_NAME);  
while (cursor.moveToNext()) {  
    String name = cursor.getString(cursor.getColumnIndex("name"));  
    int age = cursor.getInt(cursor.getColumnIndex("age"));  
    // 处理数据...  
}  
cursor.close();

请注意,上述代码是基础用法示例,并未处理各种可能的异常。在生产环境中,你应该做好异常处理,并确保在查询结束后关闭Cursor和SQLiteDatabase。

SQLiteDatabase中还提供了一个query的方法对数据进行查询。参数如下:
在这里插入图片描述

8,完整的参考代码用例
在Android中,我们可以使用SQLite数据库进行CRUD(创建、读取、更新、删除)操作。以下是一个简单的例子,展示了如何在Android应用中实现这些操作:

首先,我们需要创建一个SQLite数据库和一张表。这个可以通过创建一个名为DatabaseHelper的类来完成,如下所示:

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
  
public class DatabaseHelper extends SQLiteOpenHelper {  
  
    // 数据库名  
    private static final String DATABASE_NAME = "database.db";  
  
    // 数据库版本号  
    private static final int DATABASE_VERSION = 1;  
  
    // 定义数据库表名  
    public static final String TABLE_NAME = "table";  
  
    // 创建表的SQL语句  
    private String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +  
            "_id INTEGER PRIMARY KEY," +  
            "name TEXT," +  
            "age INTEGER" +  
            ");";  
  
    public DatabaseHelper(Context context) {  
        super(context, DATABASE_NAME, null, DATABASE_VERSION);  
    }  
  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        db.execSQL(CREATE_TABLE);  
    }  
  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        // 这里可以更新数据库表结构  
    }  
}

接下来,我们可以在主应用类中实现对数据库的CRUD操作:

import android.content.ContentValues;  
import android.database.Cursor;  
import android.database.sqlite.SQLiteDatabase;  
import android.util.Log;  
  
public class MainActivity extends AppCompatActivity {  
  
    private DatabaseHelper dbHelper;  
    private SQLiteDatabase db;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 初始化DatabaseHelper对象,并打开数据库连接  
        dbHelper = new DatabaseHelper(this);  
        db = dbHelper.getWritableDatabase();  
    }  
  
    // 创建记录  
    public void create() {  
        ContentValues values = new ContentValues();  
        values.put("_id", 1);  
        values.put("name", "张三"); 
        // 年龄是整数,所以用了INTEGER类型。如果是小数,可以用REAL类型。
        //如果是文本,可以用TEXT类型。如果是BLOB,可以用BLOB类型。等等。
        //详情请查阅SQLite官方文档。   
        values.put("age", 28);  
        // 第一个参数是表名,第二个参数是保留字,第三个参数是
        //ContentValues对象,即需要插入的数据。  
        db.insert(DatabaseHelper.TABLE_NAME, null, values);  
    }  
  
    // 读取记录(查询所有记录)  
    // 第一个参数是表名,第二个参数是字段数组(null表示所有字段),
    //后面的参数都是保留字,最后一个是排序方式,比如"ASC"或"DESC"。
    //这里没有指定排序方式,所以默认是按照_id的升序排列。
    //如果需要按照其他字段排序,需要指定该字段和排序方式。
    //例如:db.query(TABLE_NAME, null, "name ASC", null, null, null, null); 
    //表示按照name字段的升序排列。详情请查阅SQLite官方文档。
    //另外,这里没有指定where子句,所以会查询所有记录。
    //如果需要查询满足特定条件的记录,需要在query方法的第二个参数中指定条件,
    //例如:"name = ?",并且在方法的第四个参数中指定条件对应的值,
    //例如:"张三"。这样就会查询name字段等于"张三"的所有记录。如果查询条件包含多个字段,需要把多个条件用AND或OR连接起来。
    //例如:"name = ? AND age > ?",并且在方法的第四个参数中指定值:"张三","25"。
    //这样就会查询name字段等于"张三"并且age字段大于25的所有记录。等等。
    //详情请查阅SQLite官方文档。最后需要注意的是,在查询数据之后,
    //需要关闭Cursor对象以释放资源。详情请查阅Android官方文档。例如:cursor.close(); 
    //或者 cursor.closeQuietly(); 注意这两个方法都是从Cursor类中继承
    //过来的,而不是从SQLiteQuery类中继承过来的。因此可以确保资源被正确释
    //放。此外,为了避免在某些情况下发生内存泄漏问题,建议在不再需要
    public void read() {  
        Cursor cursor = db.query(DatabaseHelper.TABLE_NAME, null, null, null, null, null, null);  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作系统内部机制学习

切换线程时需要保存什么 函数需要保存吗?函数在Flash上,不会被破坏,无需保存。函数执行到了哪里?需要保存吗?需要保存。全局变量需要保存吗?全局变量在内存上,无需保存。局部变量需要保存吗&am…

OpenWRT搭建本地web站点并结合内网穿透实现公网远程访问

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器,目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器,并且和…

ubuntu22.04安装 nvidia-cudnn

nvidia-cudnn 是 NVIDIA CUDA 深度神经网络库(CUDA Deep Neural Network library)的缩写。这是一个由 NVIDIA 提供的库,用于加速深度学习应用程序。它包含了针对深度神经网络中常用操作(如卷积、池化、归一化、激活层等&#xff0…

如何使用cpolar+Inis在Ubuntu系统快速搭建本地博客网站公网可访问

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

go 编译apk

首先进行安装go 安装 wget https://studygolang.com/dl/golang/go1.21.5.linux-amd64.tar.gz tar zxvf go1.21.5.linux-amd64.tar.gz mv go /usr/local/ vim /etc/profile # 进行配置环境变量: export GOROOT/usr/local/go export PATH$PATH:$GOROOT/bin # 保存退…

推荐算法:HNSW【推荐出与用户搜索的类似的/用户感兴趣的商品】

HNSW算法概述 HNSW(Hierarchical Navigable Small Word)算法算是目前推荐领域里面常用的ANN(Approximate Nearest Neighbor)算法了。其目的就是在极大量的候选集当中如何快速地找到一个query最近邻的k个元素。 要找到一个query的…

风控之Android设备指纹技术

标识性参数——Android ID、IMEI、OAID非标识性参数 非标识性参数——手机运营商 1 设备指纹 简单来讲,设备指纹是指用于标识出该设备的设备特征。可以是单一设备特征,也可以是多种设备特征的组合,以方便风控系统对设备的唯一性进行识别。…

BSN实名DID服务发布会将于12月12日在北京召开

当前,数字身份已经成为实现经济健康发展与社会和谐安全稳定的重要基础,同时也是激发数据要素价值,支持数字经济快速发展的重要手段,在数字中国建设中发挥着至关重要的作用。 2016年,经国家发展改革委批准,…

2023.12.9 关于 Spring Boot 事务传播机制详解

目录 事务传播机制 七大事务传播机制 支持当前调用链上的事务 Propagation.REQUIRED Propagation.SUPPORTS Propagation.MANDATORY 不支持当前调用链上的事务 Propagation.REQUIRES_NEW Propagation.NOT_SUPPORTED Propagation.NEVER 嵌套事务 Propagation.NESTED…

币圈新贵Blast,一条可以帮助用户赚钱的Layer2!

Blast在短短两天内实现了超过2亿美元的TVL飙升,这一迅猛增长让整个低迷已久的Layer2市场感到震惊。尽管Blast主网要到二月份才正式上线,但这并未能阻挡用户们热情地锁仓。截至目前,Blast已经吸引了超过75,000名用户,总锁定价值已经…

直流电和交流电

直流电(Direct Current,简称DC)和交流电(Alternating Current,简称AC)是电流的两种基本形式。 1. 直流电 直流电是指电流方向始终保持不变的电流。在直流电中,电子只能沿着一个方向移动。直流电…

UEFI下Windows10和Ubuntu22.04双系统安装图解

目录 简介制作U盘启动盘并从U盘启动电脑安装系统安装Windows系统安装Ubuntu 附录双系统时间不一致 简介 传统 Legacy BIOS主板下的操作系统安装可参考本人博客 U盘系统盘制作与系统安装(详细图解) ,本文介绍UEFI主板下的双系统安装&#xff…

快手商品采集API商品列表API商品详情数据API接口获取快手商品信息API

背景介绍 快手商城是快手平台上的一个电商购物频道,类似于淘宝、京东等商城,用户可以通过搜索或者快手 App 首页的一级入口进入。目前,快手商城正在招商中,今年双 11 期间,快手将力推短视频、直播间、店铺、商城这一全…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中,我们将使用python3作为代码语言。 步骤图例1、入口2、创建(我们选择使用python3.7)3、IAM权限(…

C# 数据的保存和提取(.TXT格式)

红色部分的才是最终版 一、将页面内容保存到文件中 第一步 创建Visual的Windows窗体应用,使用的是 第二步 创建几个Label控件、TextBox控件、以及Button按钮,而TextBox控件放入Panel中 第三步 先对写法进行了解,了解保存的语句 StreamWriter sw= new StreamWriter(TXT…

自定义类型详解(1)

文章目录 目录1. 结构体1.1 结构的基础知识1.2 结构的声明1.3 特殊的声明1.4 结构的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐1.7 修改默认对齐数1.8 结构体传参 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段的应用 3. 枚举3.1 枚举类型…

Appium python自动化测试系列之移动自动化测试!

1.1 移动自动化测试现状 因为软件行业越来越发达,用户的接受度也在不断提高,所以对软件质量的要求也随之提高,当然这个也要分行业,但这个还是包含了大部分。因为成本、质量的变化现在对自动化测试的重视度越来越高,在…

mmseg上手自己的数据集

制作自己的数据集,VOC格式为例。 这三个文件包括数据集的名称。可以使用labelme脚本自动生成。 跟据预测类别修改配置文件 D:\projects\mmsegmentation-main\mmseg\datasets\voc.py 因为是voc格式的数据集,在这个文件里进行配置,修改成自己数…

保研毕业论文查重率多少通过【保姆教程】

大家好,今天来聊聊保研毕业论文查重率多少通过,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 保研毕业论文查重率多少通过 在保研过程中,毕业论文的查重率是衡量学术诚信和论文…

微信社群机器人开发

简要描述: 删除朋友圈 请求URL: http://域名地址/deleteSns 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId…