当前位置: 首页 > news >正文

[Android Studio]Android 数据存储--SQLite数据库存储

 🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪


Topic 

发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。

📋笔记目录

💯实战演练--基于SQLite数据库的通讯录实现数据的增删改查

1,创建程序

2,放置界面控件

3,编写界面交互代码

4, 核心方法讲解

5,数据库的创建及初始化

6,运行程序

🚩结尾


💯实战演练--基于SQLite数据库的通讯录实现数据的增删改查


1,创建程序

创建一个名为Directory的应用程序,指定报名为cn.example.directory。

2,放置界面控件

在activity_main.xml布局文件中放置三个TextView控件,分别用于显示"姓名"文本、“电话”文本以及显示保存的姓名和电话信息,两个EditText控件分别用于显示姓名的输入框与电话的输入框,四个Button控件分别用于显示添加按钮、查询按钮、修改按钮以及删除按钮。

 

<?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"tools:context=".MainActivity"android:padding="16dp"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="130dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓 名:"android:textSize="18sp" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/et_name"android:hint="请输入姓名:"android:textSize="16sp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电 话:"android:textSize="18sp"/><EditTextandroid:id="@+id/et_phone"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入手机号码:"android:textSize="16sp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/btn_add"android:layout_marginRight="2dp"android:layout_weight="1"android:background="#B9B9FF"android:text="添加"android:textSize="18sp"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/btn_query"android:layout_marginRight="2dp"android:layout_weight="1"android:background="#DCB5FF"android:text="查询"android:textSize="18sp"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/ben_update"android:layout_marginRight="2dp"android:layout_weight="1"android:background="#E6CAFF"android:text="修改"android:textSize="18sp" /><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/btn_delete"android:layout_weight="1"android:background="#ACD6FF"android:text="删除"android:textSize="18sp"/></LinearLayout><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tv_show"android:layout_marginTop="25dp"android:textSize="20sp"/></LinearLayout>

3,编写界面交互代码

在MainActivity中编写逻辑代码,实现联系人信息的添加、查询、修改以及删除功能,由于通讯录界面上的添加、查询、修改、删除按钮需要设置点击事件,因此将MainActivity实现OnClickListener接口,并重写Onclick方法,在该方法中实现这四个按钮的点击事件。

package com.example.directory;import androidx.appcompat.app.AppCompatActivity;import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener {MyHelper myHelper;private EditText mEtName;private EditText mEtphone;private TextView mTvShow;private Button mBtnAdd;private Button mBtnQuery;private Button mBtnUpdate;private Button mBtnDelete;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myHelper = new MyHelper(this);init();}private void init() {mEtName = findViewById(R.id.et_name);mEtphone = findViewById(R.id.et_phone);mTvShow = findViewById(R.id.tv_show);mBtnAdd = findViewById(R.id.btn_add);mBtnQuery = findViewById(R.id.btn_query);mBtnUpdate = findViewById(R.id.ben_update);mBtnDelete = findViewById(R.id.btn_delete);mBtnAdd.setOnClickListener(this);mBtnQuery.setOnClickListener(this);mBtnUpdate.setOnClickListener(this);mBtnDelete.setOnClickListener(this);}@Overridepublic void onClick(View v) {String name,phone;SQLiteDatabase db;ContentValues values;switch (v.getId()){case R.id.btn_add:name = mEtName.getText().toString();phone = mEtphone.getText().toString();db = myHelper.getWritableDatabase();values = new ContentValues();values.put("name",name);values.put("phone",phone);db.insert("information",null,values);Toast.makeText(this,"信息已添加",Toast.LENGTH_SHORT).show();db.close();break;case R.id.btn_query:db = myHelper.getReadableDatabase();Cursor cursor = db.query("information",null,null,null,null,null,null);if (cursor.getCount() == 0){mTvShow.setText("");Toast.makeText(this,"没有数据",Toast.LENGTH_SHORT).show();}else {cursor.moveToFirst();mTvShow.setText("Name : " + cursor.getString(1) + " ;  Tel : " + cursor.getString(2));}while (cursor.moveToNext()){mTvShow.append("\n" + "Name : " + cursor.getString(1) + " ; Tel : " + cursor.getString(2));}cursor.close();db.close();break;case R.id.ben_update:db = myHelper.getWritableDatabase();values = new ContentValues();values.put("phone",phone = mEtphone.getText().toString());db.update("information",values,"name=?", new String[]{mEtName.getText().toString()});Toast.makeText(this,"信息已修改",Toast.LENGTH_SHORT).show();db.close();break;case R.id.btn_delete:db =myHelper.getWritableDatabase();db.delete("information",null,null);Toast.makeText(this,"信息已删除",Toast.LENGTH_SHORT).show();mTvShow.setText("");db.close();break;}}
}

4, 核心方法讲解

在上述代码中,一开始创建了一个init()方法,用于初始化界面控件并设置添加,查询,修改,删除按钮的点击监听事件。

 通过SQLiteDatabase类的insert()方法将姓名和电话信息添加到数据库中。

 通过SQLiteDatabase类的query()方法将数据库中的姓名和电话信息查询出来,并显示在界面中。

 通过SQLiteDatabase类的update()方法修改数据库中的姓名和电话信息。

 通过SQLiteDatabase类的delete()方法删除数据库中的姓名和电话信息。

 通过SQLiteDatabase类的execSQL()方法创建表information。

 

5,数据库的创建及初始化

package com.example.directory;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import androidx.annotation.Nullable;class MyHelper extends SQLiteOpenHelper {public MyHelper(Context context) {super(context, "incast.db", null, 1);}// 数据库第一次被创建时调用该方法@Overridepublic void onCreate(SQLiteDatabase db) {//初始化数据库的表结构,执行一条建表的SQL语句db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20), phone VARCHAR(20))");}//当数据库的版本号增加时调用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

6,运行程序

运行上述程序:
输入两条联系人信息,点击添加按钮运行,结果如图所示:

点击查询按钮,会发现添加的联系人信息在界面中显示:

 

重新输入一个人的联系电话,点击修改按钮,然后再进行查询,会发现联系人电话已经修改成功:

 

点击删除按钮,会将数据库中所有联系人进行删除:

 

🚩结尾


至此,文件存储的相关知识已讲解完成,该知识所用到的核心技术是利用I/O流来进行文件读写操作,其中,Context类中提供的openFileInput()和OpenFileOutput()方法的用法,一定要掌握。 

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
🌈写给读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事顺意🏳️‍🌈

相关文章:

[Android Studio]Android 数据存储--SQLite数据库存储

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…...

学校节能降耗减排方案——能耗监管平台的建设及效果剖析

摘要&#xff1a;作为崭新的校园能耗管理手段&#xff0c;能耗监测平台以传统管理方式无法企及的优势有力地提升了高校能源管理工作的水平&#xff0e;从而受到了相关管理者的青睐。本文梳理总结了高校能耗监测平台的基本组成和优势特点&#xff0c;同时对能耗平台建设和使用中…...

探索IP地址的应用

无论是互联网行业还是传统行业都会用到网络&#xff0c;作为企业如何维护网络安全&#xff0c;保障网站不被攻击&#xff0c;数据不被泄露等。这个时候我们就会通查询IP归属地&#xff0c;辅助企业解决安全问题。下面介绍一下ip归属地在各行业的具体应用。1.网安行业应用一&…...

点赞破万!阿里面试官总结的2022最新1685页Java面试宝典太全了

程序员入职企业的难度也在持续加大&#xff0c;如何顺利通过面试成为了大家所关心的话题。针对这些人群的需求&#xff0c;小编从阿里找来一份让大家在求职过程中旗开得胜&#xff01;是从什么时候开始准备的&#xff1f;大概的我已经记不清了&#xff0c;可能是 4 月份左右开始…...

项目搭建规范

一. 代码规范 1.1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。 # http://editorconfig.org root true [*] # 表示所有文件适用 charset utf-8 # 设置文件字符集为 utf-8 indent_style space # 缩进…...

8.Docker Machine

Docker Machine Docker Machine是Docker官方编排&#xff08;Orchestration&#xff09;项目之一&#xff0c;负责在多种平台上快速安装 Docker 环境。 Docker Machine项目基于Go语言实现&#xff0c;目前在Github上进行维护。 Docker Machine是 Docker 官方提供的一个工具&…...

如何配合使用ESLINT 和 PRETTIER

各自的作用 eslint&#xff1a;静态分析语法错误prettier&#xff1a;代码格式化工具&#xff08;需要在IDE中安装prettier的插件&#xff09; 使用方法&#xff1a; 安装 npm install eslint --save-dev // 创建 .eslintrc.json 文件 npx eslint --init npm install eslint-…...

学英语的优势已来,抓住这个机会

文 / 冰雪&#xff08;微信公众号&#xff1a;王不留&#xff09; ChatGPT大火&#xff0c;国外的商业价值还没找到&#xff0c;咱们这边已经开始变现了。谷雨小姐姐昨天在”一起学英语”微信群发了一张“收割韭菜”的文案截图。 299入社群&#xff0c;服务内容为&#xff1a;免…...

基于微信小程序云开发实现考研题库小程序项目(完整版)

今天手把手的带大家实现一款答题类的题库小程序&#xff0c;如果着急的话&#xff0c;可以直接去看文末源码.下载与项目部署。考研题库小程序云开发实战&#xff0c;完整版提供给大家学习。题库小程序&#xff0c;基于云开发的微信答题小程序&#xff0c;软件架构是微信原生小程…...

AI一点通:使用 ColumnTransformer 转换 Pandas DataFrame 的一个或多个列

在处理表格数据时&#xff0c;常常需要对一个或多个列进行转换以使它们更适合于分析或建模。在许多情况下&#xff0c;可以使用 Pandas 库轻松完成这些转换。然而&#xff0c;在处理大型数据集或构建机器学习管道时&#xff0c;使用 scikit-learn 的 ColumnTransformer 类来将转…...

【C语言】全局变量、局部变量和静态变量的区别

目录一、变量&#xff08;一&#xff09;全局变量&#xff08;二&#xff09;局部变量&#xff08;三&#xff09;静态变量&#xff08;1&#xff09;静态全局变量&#xff08;2&#xff09;静态局部变量二、常量一、变量 1、变量定义 变量的名称可以由字母、数字和下划线字符…...

血氧仪「上潜」,智能穿戴「下沉」

文|智能相对论作者|沈浪缺货、涨价、一“仪”难求......过去短短的几周&#xff0c;血氧仪市场持续走热&#xff0c;受到前所未有的关注&#xff0c;像鱼跃医疗这样的业内巨头更是赚得盆满钵满&#xff0c;但同时也深陷“发国难财”的舆论泥潭&#xff0c;说来也是唏嘘。尽管目…...

CPP2022-计算机类-期末考试

6-1 判断素数 分数 5 全屏浏览题目 切换布局 作者 李国瑞 单位 东北大学秦皇岛分校 设计一个函数&#xff0c;判断输入数据是否为素数&#xff0c;返回bool类型结果。 函数接口定义&#xff1a; bool prime(int num); 说明&#xff1a;num为正整数。 裁判测试程序样例&…...

【蓝桥集训】第二天——差分

作者&#xff1a;指针不指南吗 专栏&#xff1a;Acwing 蓝桥集训每日一题 &#x1f43e;做题过程中首先应该注意时间复杂度问题&#x1f43e; 文章目录1.改变数组元素2.差分3.差分矩阵1.改变数组元素 给定一个空数组 V 和一个整数数组 a1,a2,…,an。 现在要对数组 V 进行 n 次操…...

Spring Boot最核心的27个注解,你了解多少?

https://blog.csdn.net/ManuMAX/article/details/129017443 导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架&#xff0c;它不仅可以方便地创建生产级的Spring应用程序&#xff0c;还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成…...

css3弹性盒子

弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。 弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。 弹性容器内包含了一个或多个弹性子元素。 display:flex; 修改排列方式: 0. direction: rtl; //(right-to-left),弹性子元素的…...

数据分析与SAS学习笔记2

SAS在企业使用的情况&#xff1a; SAS是一个很昂贵的商业软件。在企业中使用SAS比较多&#xff0c;在企业界中是比较流行&#xff0c;在学术界使用R比较多。 SAS简介&#xff1a;统计分析系统 处理生物分析数据。 SAS成为统计领域的国际标准软件&#xff0c;服务全球50000多家…...

零信任-Akamai零信任介绍(6)

​Akamai零信任介绍 Akamai是一家专注于分布式网络服务的公司&#xff0c;它提供了一系列的互联网内容和应用加速服务。关于Akamai的零信任&#xff0c;它指的是Akamai的安全架构中不存在任何一个环节是可以被单独的控制或影响的&#xff0c;因此可以提供更高的安全性。通过使…...

表现良好的最长时段[前缀和思想子数组]

前缀和与最长子数组前言一、表现良好的最长时间段二、前缀和思想&子数组1、前缀和&map2、前缀和&单调栈总结参考文献前言 对于子数组/子串问题&#xff0c;紧密连续前缀和/滑动窗口/单调栈&#xff1b;挖掘内在规律&#xff0c;可以简化代码&#xff0c;降低时空复…...

Python 获取当前系统时间

在有的时候&#xff0c;系统不能联网&#xff0c;需要获取系统的当前实现&#xff0c;此时需要python的datetime库。 一、使用方法 1. 导入库&#xff1a;import datetime 2.获取当前日期和时间&#xff1a;now_time datetime.datetime.now() 3.格式化成我们想要的格式&am…...

pytorch基础入门教程

pytorch基础入门教程 Pytorch一小时入门教程 前言 机器学习的门槛并没有想象中那么高&#xff0c;我会陆续把我在学习过程中看过的一些文章和写过的代码以博客的形式分享给大家&#xff0c;和大家一起交流&#xff0c;这个是本系列的第一篇&#xff0c;pytoch入门教程&#x…...

RTSP协议交互时TCP/UDP的区别 以及视频和音频的区别 以及H264/H265的区别

经过这几天的调试 一个功能简单的 RTSP服务端已经实现了 支持TCP/UDP 支持H264 H265 支持同时传输 AAC音频 记录下 交互时需要注意的地方 1.OPTIONS 都一样 如下&#xff1a;左箭头内是客户端发给服务端 箭头内是服务端回给客户端 2.DESCRIBE 目前的流是包含视频和AAC音频…...

调用大智慧L2接口是什么原理?作用是什么?

有些开发人员想要设计一个微信公众号或者微信小程序&#xff0c;由于自己搭建数据库工作量太大&#xff0c;或者技术受限&#xff0c;也会选择调用大智慧L2接口减少工作量。调用大智慧L2接口是什么原理&#xff1f;作用是什么&#xff1f; 大智慧L2接口即应用程序编程接口&…...

数据结构 - 栈 与 队列 - (java)

前言 本篇介绍栈和队列&#xff0c;了解栈有顺序栈和链式栈&#xff0c;队列底层是双链表实现的&#xff0c;单链表也可以实现队列&#xff0c;栈和队列的相互实现和循环队列&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&a…...

CellularAutomata元胞向量机-8-渗流集群MATLAB代码分享

%% Percolation Clusterclf clc, clearthreshold .63; % ax axes(units,pixels,position,[1 1 650 700],color,k); text(units, pixels, position, [150,255,0],... string,美赛,color,w,fontname,helvetica,fontsize,100) text(units, pixels, position, [40,120,0],... str…...

iOS UI自动化测试详解

前言&#xff1a; 小目标 关于UI自动化的定义&#xff0c;我想要的是自动地按照流程去点击页面、输入数据&#xff0c;不需要人去参与&#xff0c;节省人工时间。比如登录&#xff0c;能够自己去填写用户名&密码&#xff0c;然后点击按钮跳转到下一个页面等。在能够保证业…...

Mybatis源码分析(九)Mybatis的PreparedStatement

文章目录一 JDBC的PreparedStatement二 prepareStatement的准备阶段2.1 获取Connection2.1.1 **UnpooledDataSource**2.1.2 PooledDataSource2.2 Sql的预编译PreparedStatementHandler2.3 为Statement设置参数2.4 执行具体的语句过程官网&#xff1a;mybatis – MyBatis 3 | 简…...

winfrom ui

http://www.iqidi.com/download/warehouse/Device_DotNetBar.rar http://qiosdevsuite.com/Download https://sourceforge.net/projects/qiosdevsuite/ https://www.cnblogs.com/hcyblogs/p/6758381.html https://www.cnblogs.com/jordonin/p/6484366.html MBTiles地图瓦片管…...

中国国家级地面气象站基本气象要素日值数据集(V3.0)

数据集摘要 数据集包含了中国基本气象站、基准气候站、一般气象站在内的主要2474个站点1951年1月以来本站气压、气温、降水量、蒸发量、相对湿度、风向风速、日照时数和0cm地温要素的日值数据。数据量为21.3GB。 (1)SURF_CLI_CHN_MUL_DAY-TEM-12001-201501.TXT 气温数据TEM, 包…...

【Python语言基础】——Python NumPy 数组副本 vs 视图

Python语言基础——Python NumPy 数组副本 vs 视图 文章目录 Python语言基础——Python NumPy 数组副本 vs 视图一、Python NumPy 数组副本 vs 视图一、Python NumPy 数组副本 vs 视图 副本和视图之间的区别 副本和数组视图之间的主要区别在于副本是一个新数组,而这个视图只是…...

武汉seo关键字优化/信息流优化师需要具备哪些能力

把该窗体的KeyPreview属性设成true private void frmMain_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode Keys.F1) { } }转载于:https://blog.51cto.com/flydragon0815/719558...

wordpress去除相册样式/关键词搜索热度查询

Linux软RAID的实现方式前提软RAID说明软RAID实现mdadm配置示例软RAID测试和修复软RAID管理练习示例创建一个10G可用空间的RAID5。第1步&#xff1a;准备3块 5G 的硬盘。并对其进行分区创建&#xff0c;分区格式为 fd &#xff0c;大小 5G第2步&#xff1a;再增加一块空闲盘第3步…...

MacBook怎么做网站/新乡seo网络推广费用

FCKeditor 是个很优秀的 Web 编辑器&#xff0c;很多项目甚至产品中都在用它。但它默认的上传文件目录为/userfiles/&#xff0c;也就是说&#xff0c;如果在编辑器中上传了图片等文件的话&#xff0c;只能在/userfiles/文件夹下。对于多用户会员系统的网站系统&#xff0c;这显…...

网站开发难度/seo策略是什么意思

记得在异常出现之前&#xff0c;只安装了MySQL&#xff0c;之后OrCAD Capture、Allegro就打不开了。 Capture.exe - 系统错误 allegro.exe - 系统错误 我尝试在Cadence的安装目录下搜索这些dll文件&#xff0c;可以找到得到。 上网搜了一下&#xff0c;怀疑是系统变量缺失导致的…...

番禺做网站600元/seo研究协会网

写在文章之前&#xff1a;博友们&#xff0c;你的支持是我最大的动力&#xff0c;在阅读我文章的同时&#xff0c;也请为我投上你宝贵的一票&#xff0c;谢谢。 投票请进&#xff1a;http://2010blog.51cto.com/855319 &#xff0d;&#xff0d;&#xff0d;&#xff0d;&#…...

中线企业网站建设的问题/哪里的网络推广培训好

http://my.oschina.net/goal/blog/195749?p1 目录[-] 写在前面的话什么是字节序MSB和LSB大端序小端序网络字节序主机字节序总结pack/unpack详解格式字符翻译格式字符详解unpack的用法一些例子PHP作为一门为web而生的服务器端开发语言&#xff0c;被越来越多的公司所采用。其中…...