SQLite数据库的增删改查

一、前言

这篇文章主要针对Android自带的轻量级数据库SQLite 实现增删改查。该数据库常用于本地数据的储存喝管理。例如,可以将用户信息,日志数据等重要信息存储在SQLite数据库中。

二、代码实现

1.创建MySqliteOpenHelp作为工具类


/*** MySqliteOpenHelp作为工具类  使用单例模式(1.构造函数私有化:不让外界访问。2.对外提供函数)*/public class MySqliteOpenHelper extends SQLiteOpenHelper {//2.对外界提供函数 单例模式private static SQLiteOpenHelper mInstance;public static synchronized SQLiteOpenHelper getInstance(Context context){if (mInstance == null){mInstance = new MySqliteOpenHelper(context,"AnglinDB",null,1);//想要数据库升级把1改为2}return mInstance;}//为什么要有含参构造函数,因为需要传给父类上下文,数据库名称,工厂,版本号等参数//第一步:构造函数私有化:不让外界访问private MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);//传给父类}//创建表   表数据初始化   数据库第一次创建的时候调用。第二次发现有了就不会重复创建了。也意味着:函数只执行一次。//数据库初始化@Overridepublic void onCreate(SQLiteDatabase db) {//创建表 :person//主键:primary key必须唯一的//自动增长:例如 1,2,3,4,5  autoincrement//_id标准的写法(要求1)    只能使用:主键只能使用Integer类型的(要求2)//id 写法不标准String sql = "create table person(_id integer primary key autoincrement, name text)";db.execSQL(sql);}//数据库升级@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}
}

2.实现数据库的增删改查

//SQLite增删改查
public class DBActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_dbactivity);}/*** 生成DB文件** @param view*/public void createDB(View view) {SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);//database文件夹创建靠下面这句话SQLiteDatabase readableDatabase = helper.getReadableDatabase();}/*** 查询** @param view*/public void query(View view) {SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);//database文件夹创建靠下面这句话SQLiteDatabase db = helper.getReadableDatabase();if (db.isOpen()) {//确保数据库打开才能放心操作//返回游标Cursor cursor = db.rawQuery("select * from person", null);//迭代游标往下面移动来迭代数据while (cursor.moveToNext()) {@SuppressLint("Range")int _id = cursor.getInt(cursor.getColumnIndex("_id"));@SuppressLint("Range")String name = cursor.getString(cursor.getColumnIndex("name"));Log.d("Anglin", "query:_id " + _id +","+ "name:" + name);}//一定要记得关闭游标,否则会耗费性能cursor.close();//数据库也要关闭db.close();}}/*** 插入数据到数据库** @param view*/public void insert(View view) {SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);//database文件夹创建靠下面这句话SQLiteDatabase db = helper.getWritableDatabase();if (db.isOpen()) {//确保数据库打开才能放心操作//插入语句String sql = "insert into person(name)values('Anglin')";db.execSQL(sql);//规范:必须关闭数据库db.close();}}/*** 修改第3条数据 为恭喜发财** @param view*/public void update(View view) {SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);//database文件夹创建靠下面这句话SQLiteDatabase db = helper.getWritableDatabase();if (db.isOpen()) {//确保数据库打开才能放心操作//修改语句String sql = "update person set name =? where _id =?";db.execSQL(sql, new Object[]{"恭喜发财", 3});//规范:必须关闭数据库db.close();}}/*** 删除:第四条数据** @param view*/public void delete(View view) {SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);//database文件夹创建靠下面这句话SQLiteDatabase db = helper.getWritableDatabase();if (db.isOpen()) {//确保数据库打开才能放心操作//修改语句String sql = "delete from person  where _id =?";db.execSQL(sql, new Object[]{4});//规范:必须关闭数据库db.close();}}
}

 页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".study.DBSQLite.DBActivity"><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="createDB"android:text="生成DB文件"tools:layout_editor_absoluteX="191dp"tools:layout_editor_absoluteY="261dp" /><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="query"android:text="查询" /><Buttonandroid:id="@+id/button4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="insert"android:text="插入" /><Buttonandroid:id="@+id/button5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="update"android:text="修改" /><Buttonandroid:id="@+id/button6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="delete"android:text="删除" />
</LinearLayout>

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

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

相关文章

GSCoolink GSV1201E Type C/DP1.2转HDM1.4

DisplayPort 1.2 to HDMI 1.4 Converter with Embedded MCU 功能特征 1、GSV1201E是一款高性能、低功耗、USB Type-C Alternate Mode DisplayPort 1.2 to HDMI 1.4转换器。 2、显示接口接收器支持21.6Gbps(HBR2&#xff0c;4-lane)。 3、HDMI发射器支持9Gbps(TMDS3G3Lane)。…

Swagger2接口测试文档

目录 一、Swagger简介 1.1 Swagger是什么&#xff1f; 1.2 为什么要用Swagger 1.3 Swagger注解 二、Spring集成Swagger 三、测试环境配置 一、Swagger简介 1.1 Swagger是什么&#xff1f; Swagger是一款RESTFUL接口的文档在线自动生成功能测试功能软件。Swagger是一个规…

git如何修改提交代码时的名字和邮箱?

在Git中修改提交时使用的用户名和电子邮件地址&#xff0c;你可以通过配置全局或本地的Git配置文件来实现。全局配置适用于你系统上的所有Git仓库&#xff0c;而本地配置只适用于当前仓库。 修改全局用户名和邮箱 如果你想要更改全局的用户名和邮箱&#xff0c;你可以使用下面…

Linux之进程(五)(进程控制)

目录 一、进程创建 1、fork函数创建进程 2、fork函数的返回值 3、fork常规用法 4、fork调用失败的原因 二、进程终止 1、进程终止的方式 2、进程退出码 3、进程的退出方法 三、进程等待 1、进程等待的必要性 2、wait函数 3、waitpid函数 四、进程程序替换 1、概念…

armv8-a 介绍

ARMv8-A 是针对应用配置文件的最新一代 ARM 架构。现在包括32位执行状态和64位执行状态。ARMv8 引入了使用 64 位宽寄存器执行执行的能力,但提供了向后兼容机制以使现有 ARMv7 软件能够执行。 AArch64是用于描述 ARMv8 架构的 64 位执行状态的名称。AArch32描述了ARMv8架构的…

Android studio中导入opencv库

具体opencv库的导入流程参考链接&#xff1a;Android Studio开发之路 &#xff08;五&#xff09;导入OpenCV以及报错解决 一、出现的错误&#xff1a;NullPointerException: Cannot invoke “java.io.File.toPath()” because “this.mySdkLocation” is null 解决办法&#…

北斗卫星导航系统介绍

1.北斗卫星导航系统 1.1概述 北斗卫星导航系统&#xff08;BeiDou&#xff08;COMPASS&#xff09;Navigation Satellite System&#xff09;是中国正在实施的自主发展、独立运行的全球卫星导航系统。系统建设目标是&#xff1a;建成独立自主、开放兼容、技术先进、稳定可靠的…

java获取当前线程的上下文类加载器(context ClassLoader)

当前线程的上下文类加载器初始设置等于加载该应用的类加载器。 代码示例&#xff1a; package com.thb;public class Demo4 {public static void main(String[] args) {System.out.println(Thread.currentThread().getContextClassLoader());} }运行输出&#xff1a;

客户需求分析常用的ChatGPT通用提示词模板

客户需求调研&#xff1a;如何进行客户需求调研&#xff0c;获取准确的需求信息&#xff1f; 客户画像建立&#xff1a;如何建立客户画像&#xff0c;深入了解客户特征和需求&#xff1f; 痛点识别与解决&#xff1a;如何识别客户的痛点&#xff0c;并制定相应的解决方案&…

k8s 中部署Jenkins

创建namespace apiVersion: v1 kind: Namespace metadata:name: jenkins创建pv以及pvc kind: PersistentVolume apiVersion: v1 metadata:name: jenkins-pv-volumenamespace: jenkinslabels:type: localapp: jenkins spec:#storageClassName: manualcapacity:storage: 5Giacc…

提高Spring Boot技能的9种方法

以下是提高 Spring Boot 技能的 9 种方法&#xff1a; 1. 外部化您的配置&#xff1a; 充分利用 Spring Boot 潜力的另一种方法是尽可能地尝试外部化您的配置&#xff0c;而不是对其进行硬编码。外部化您的配置将使您的应用程序更加灵活且更易于管理。 外部化配置的另一个优点…

地质灾害监测预警解决方案

目录 1.前言 2.滑坡监测站建设方案 2.1建站方案 2.2监测指标体系 2.3监测设备配置 3.地面沉降监测建设方案 3.1建设方案 3.2监测指标体系 3.3监测设备配置 4.泥石流监测站建设方案 4.1建设方案 4.2监测指标体系 4.3监测设备配置 5.岩溶塌陷监测站方案 5.1建站方案…

利用openssl进行rsa加解密的例子

OpenSSL介绍 OpenSSL安装 https://blog.csdn.net/zhizhengguan/article/details/112846817 OpenSSL实例 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include <ope…

深入理解网络 I/O:FileOutputStream、BufferFileOutputStream、ByteBuffer

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

状态管理@State

目录 一、简单类型的更新 二、class对象类型的变量 被该装饰器修饰的变量&#xff0c;在数据变化时会触发UI的刷新&#xff0c;也就是ArkTS UI中触发build()函数的调用&#xff0c;重新根据状态构建UI。如下更新是可以观察到的&#xff1a; 1、string number boolean 类型的数…

java8实战 lambda表达式、函数式接口、方法引用双冒号(中)

前言 书接上文&#xff0c;上一篇博客讲到了lambda表达式的应用场景&#xff0c;本篇接着将java8实战第三章的总结。建议读者先看第一篇博客 其他函数式接口例子 上一篇有讲到Java API也有其他的函数式接口&#xff0c;书里也举了2个例子&#xff0c;一个是java.util.functi…

Rust中Result处理方式

在Rust中有一个特殊的角色Result&#xff0c;是最常用的返回内容&#xff0c;如果是从其他语言转到Rust的话会觉得很别扭&#xff0c;很不习惯去处理Result&#xff08;至少我是这样的&#xff09;&#xff0c;所以今天整理一下在Rust中如何处理Result&#xff0c;也是自我整理…

java并发-ConcurrentHashMap 在Java7 和 8 的区别

文章目录 1.Java 7 版本的 ConcurrentHashMap2.Java 8 版本的 ConcurrentHashMap3.分析 Java 8 版本的 ConcurrentHashMap 的重要源码3.1.Node 节点3.2.put 方法源码分析3.3.get 方法源码分析 4.对比 Java7 和 Java8 的异同和优缺点4.1.并发度4.2.保证并发安全的原理4.3.遇到 H…

Jmeter实现CSV数据批量导入

CSV&#xff1a;逗号分隔值&#xff0c;是一种简洁且常见的数据存储格式。 1、参数化&#xff1a; 在Jmeter中&#xff0c;可以通过“用户自定义的变量”来实现参数化使操作方便&#xff0c;使用语法位&#xff1a;${参数名}&#xff0c;如下图&#xff1a; 而CSV也同理&…

本地文件内容搜索神器AnyTXT Searcher如何搭建与远程访问

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况&#xff0c;异地办公或者不在公司&#xff0c;想找…