【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);  

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

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

相关文章

十年前端之离别的旋律

在一家名叫“梦想家”的小公司里,有一个普通的程序员,他的名字叫做小帅。每天默默地坐在角落里,默默地写着代码,默默地为公司付出。他的眼睛里总是充满了对工作的热爱和对生活的热情,但他的内心却隐藏着一个秘密&#…

Qt之QGraphicsView —— 笔记1.2:将QGraphicsView放置主窗口上,绘制简单图元(附完整源码)

效果 相关类介绍 QGraphicsView类提供了一个小部件,用于显示QGraphicsScene的内容。QGraphicsView在可滚动视口中可视化。QGraphicsView将滚动其视口,以确保该点在视图中居中。 QGraphicsScene类 提供了一个用于管理大量二维图形项的场景。请注意,QGraphicsScene没有自己的视…

微信小程序pc端宽高:默认宽高为1024*812,全屏宽高为1920*1032

最近开发调试pc端小程序,想知道默认打开和全屏这两种情况下的小程序宽高,发现了一种方法: 真机运行pc端小程序,点击devTools 在控制台直接打印window对象,可以获取到pc端默认屏幕宽高为1024*812,全屏pc端小…

打工人副业变现秘籍,某多/某手变现底层引擎-StableDiffusionUI引擎部署

Stable Diffusion Web UI是一个基于Stable Diffusion的交互式程序,使用gradio模块构建而成。除了基本的txt2img、img2img等功能外,该模块还包含许多模型融合改进、图片质量修复等附加升级。所有这些功能都可以通过易于使用的Web应用程序图形用户界面进行访问。 一、简介 St…

基于javaweb存钱小管家网页计划书

基于javaweb存钱小管家网页计划书 系统开发工具:idea 编程语言:Javaweb 数据库:MySQL 用户功能大致如下 需求 1. 功能性需求: (1)通用功能: 用户、管理员:用户包括注册和登录…

vue模拟el-table演示插槽用法

很多人知道插槽分为三种,但是实际到elementui当中为什么这么用,就一脸懵逼,接下来就跟大家聊一聊插槽在elementui中的应用,并且自己写一个类似el-table的组件 vue的slot分为三种::匿名插槽,具名插槽&#x…

线上项目修改最后一招 修改jar中的文件并重新打包成jar

解压jar包 在要操作的jar文件上边cmd打开命令提示符窗口(windows系统), 在cmd命令下执行 jar -xvf xxx.jar 解压jar包(其中xxx.jar换成你的jar包名) jar -xvf admin-1.0.0.jar 替换或者更改操作 如果要替换jar压缩…

前端开发学习 (五) 生命周期函数、Ajax请求

关于vue实例的声明周期,从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期 (https://cn.vuejs.org/v2/guide/instance.html#实例生命周期 ) 而声明周期勾子就是生命周期…

你是否需要可显示螺纹钢负偏差的测径仪?

面对严峻的市场形势,配合产品销售公司要求负偏差螺纹钢筋,确保产品质量达到标准要求,给用户提供合格满意的产品等,对螺纹钢进行负偏差轧制,既完成了降本增效,又满足了品质需求,更能提供客户更多…

docker-compose部署sonarqube 8.9 版本

官方部署文档注意需求版本 所以选择8.9版本 一、准备部署配置 1、持久化目录 rootlocalhost:/root# mkdir -p /data/sonar/postgres /data/sonar/sonarqube/data /data/sonar/sonarqube/logs /data/sonar/sonarqube/extensions rootlocalhost:/root# chmod 777 /data/sona…

ModStartCMS v7.7.0 集成内容区块,文件选择顺序

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市…

进程详解

进程 进程是什么 进程: 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。 进程 代码 数据 pcb pcb一般都叫task_struct pcb是什么 pcb是一种用来管理进程信息的数据结构 进程信息被存放在进程信息控制块的结构中 当程序运行起来时,可执行程序会…

Qt创建和使用动态库链接

首先建立库文件 顺序确认完成后,构建完成 注意:上图中mydll_global.h中的内容可以复制到mydll.h中去,在以后调用时只调用mydll.h即可,否则调用时需要两个头文件同事使用。 在mydll.h和mydll.cpp中可以正常编写代码&#xff…

Geoserver发布2000坐标系遇到的问题总结

在Geoserver上发布2000坐标系的服务时,要想正常发布服务,不仅仅是要涉及2000坐标系,还需要在发布的时候选择对坐标系。具体问题描述如下: 1.问题描述: 在发布好2000坐标系的服务后,在超图的平台加载服务时&…

Scrapy爬虫数据存储为JSON文件的解决方案

什么是JSON文件 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成。它基于JavaScript Spark语言的一个子集,但独立于Smashing语言,因此在许多中…

观测云实现日志存储与分析 10 倍性价比提升|SelectDB 技术团队

作者:观测云 CEO 蒋烁淼 & 飞轮科技技术团队 在云计算逐渐成熟的当下,越来越多的企业开始将业务迁移到云端,传统的监控和故障排查方法已经无法满足企业的需求。而观测云可提供整体数据的分析、洞察、可视化、自动化、监测告警、智能巡查…

基于ssm的房屋租售网站的设计与实现论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对房屋租售信息管理混乱,出错率高,信息安全性差…

解析操作系统是如何启动起来的?

操作系统被称为“第一个程序”,the first programme,原因很简单,只有当操作系统启动起来后才能运行我们编写的程序,那么你有没有想过这个问题:操作系统是怎样启动起来的呢?实际上这个过程就像发射火箭一样有…

kuboard如何部署redis?

在K8S上部署redis 如 在K8S上部署mysql 所述,auth-server、user-center、api-gateway 都需要使用 redis 服务,本文描述如何使用 Kuboard 在 Kubernetes 上部署 redis。 本文将使用 redis官方镜像 进行部署。 部署redis 在 Kuboard 界面进入名称空间 …

Leetcode—2477.到达首都的最少油耗【中等】

2023每日刷题&#xff08;五十&#xff09; Leetcode—2477.到达首都的最少油耗 算法思想 参考自灵茶山艾府 实现代码 class Solution { public:long long minimumFuelCost(vector<vector<int>>& roads, int seats) {int n roads.size() 1;vector<i…