[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数据库存储
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…...
学校节能降耗减排方案——能耗监管平台的建设及效果剖析
摘要:作为崭新的校园能耗管理手段,能耗监测平台以传统管理方式无法企及的优势有力地提升了高校能源管理工作的水平.从而受到了相关管理者的青睐。本文梳理总结了高校能耗监测平台的基本组成和优势特点,同时对能耗平台建设和使用中…...
探索IP地址的应用
无论是互联网行业还是传统行业都会用到网络,作为企业如何维护网络安全,保障网站不被攻击,数据不被泄露等。这个时候我们就会通查询IP归属地,辅助企业解决安全问题。下面介绍一下ip归属地在各行业的具体应用。1.网安行业应用一&…...
点赞破万!阿里面试官总结的2022最新1685页Java面试宝典太全了
程序员入职企业的难度也在持续加大,如何顺利通过面试成为了大家所关心的话题。针对这些人群的需求,小编从阿里找来一份让大家在求职过程中旗开得胜!是从什么时候开始准备的?大概的我已经记不清了,可能是 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官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。 Docker Machine项目基于Go语言实现,目前在Github上进行维护。 Docker Machine是 Docker 官方提供的一个工具&…...
如何配合使用ESLINT 和 PRETTIER
各自的作用 eslint:静态分析语法错误prettier:代码格式化工具(需要在IDE中安装prettier的插件) 使用方法: 安装 npm install eslint --save-dev // 创建 .eslintrc.json 文件 npx eslint --init npm install eslint-…...
学英语的优势已来,抓住这个机会
文 / 冰雪(微信公众号:王不留) ChatGPT大火,国外的商业价值还没找到,咱们这边已经开始变现了。谷雨小姐姐昨天在”一起学英语”微信群发了一张“收割韭菜”的文案截图。 299入社群,服务内容为:免…...
基于微信小程序云开发实现考研题库小程序项目(完整版)
今天手把手的带大家实现一款答题类的题库小程序,如果着急的话,可以直接去看文末源码.下载与项目部署。考研题库小程序云开发实战,完整版提供给大家学习。题库小程序,基于云开发的微信答题小程序,软件架构是微信原生小程…...
AI一点通:使用 ColumnTransformer 转换 Pandas DataFrame 的一个或多个列
在处理表格数据时,常常需要对一个或多个列进行转换以使它们更适合于分析或建模。在许多情况下,可以使用 Pandas 库轻松完成这些转换。然而,在处理大型数据集或构建机器学习管道时,使用 scikit-learn 的 ColumnTransformer 类来将转…...
【C语言】全局变量、局部变量和静态变量的区别
目录一、变量(一)全局变量(二)局部变量(三)静态变量(1)静态全局变量(2)静态局部变量二、常量一、变量 1、变量定义 变量的名称可以由字母、数字和下划线字符…...
血氧仪「上潜」,智能穿戴「下沉」
文|智能相对论作者|沈浪缺货、涨价、一“仪”难求......过去短短的几周,血氧仪市场持续走热,受到前所未有的关注,像鱼跃医疗这样的业内巨头更是赚得盆满钵满,但同时也深陷“发国难财”的舆论泥潭,说来也是唏嘘。尽管目…...
CPP2022-计算机类-期末考试
6-1 判断素数 分数 5 全屏浏览题目 切换布局 作者 李国瑞 单位 东北大学秦皇岛分校 设计一个函数,判断输入数据是否为素数,返回bool类型结果。 函数接口定义: bool prime(int num); 说明:num为正整数。 裁判测试程序样例&…...
【蓝桥集训】第二天——差分
作者:指针不指南吗 专栏:Acwing 蓝桥集训每日一题 🐾做题过程中首先应该注意时间复杂度问题🐾 文章目录1.改变数组元素2.差分3.差分矩阵1.改变数组元素 给定一个空数组 V 和一个整数数组 a1,a2,…,an。 现在要对数组 V 进行 n 次操…...
Spring Boot最核心的27个注解,你了解多少?
https://blog.csdn.net/ManuMAX/article/details/129017443 导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成…...
css3弹性盒子
弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。 弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。 弹性容器内包含了一个或多个弹性子元素。 display:flex; 修改排列方式: 0. direction: rtl; //(right-to-left),弹性子元素的…...
数据分析与SAS学习笔记2
SAS在企业使用的情况: SAS是一个很昂贵的商业软件。在企业中使用SAS比较多,在企业界中是比较流行,在学术界使用R比较多。 SAS简介:统计分析系统 处理生物分析数据。 SAS成为统计领域的国际标准软件,服务全球50000多家…...
零信任-Akamai零信任介绍(6)
Akamai零信任介绍 Akamai是一家专注于分布式网络服务的公司,它提供了一系列的互联网内容和应用加速服务。关于Akamai的零信任,它指的是Akamai的安全架构中不存在任何一个环节是可以被单独的控制或影响的,因此可以提供更高的安全性。通过使…...
表现良好的最长时段[前缀和思想子数组]
前缀和与最长子数组前言一、表现良好的最长时间段二、前缀和思想&子数组1、前缀和&map2、前缀和&单调栈总结参考文献前言 对于子数组/子串问题,紧密连续前缀和/滑动窗口/单调栈;挖掘内在规律,可以简化代码,降低时空复…...
Python 获取当前系统时间
在有的时候,系统不能联网,需要获取系统的当前实现,此时需要python的datetime库。 一、使用方法 1. 导入库:import datetime 2.获取当前日期和时间:now_time datetime.datetime.now() 3.格式化成我们想要的格式&am…...
告别手动移植!用ESP-IDF组件化方式管理你的Gui-Guider UI代码
告别手动移植!用ESP-IDF组件化方式管理你的Gui-Guider UI代码 在ESP32开发中,GUI界面的构建往往需要耗费大量精力。当使用LVGL配合Gui-Guider这样的可视化设计工具时,如何高效管理生成的UI代码成为提升开发效率的关键。本文将带你探索一种更优…...
NSudo完全指南:轻松获取Windows最高权限的5种方法
NSudo完全指南:轻松获取Windows最高权限的5种方法 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo NSu…...
《算法题讲解指南:动态规划算法--子序列问题》--29.最长递增子序列的个数,30.最长数对链,31.最长定差子序列
🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》《C入门到进阶&自我学习过程记录》 《算法题讲解指南》--优选算法 《算法题讲解指南》--递归、搜索与回溯算法 《算法题讲解指南》--动态规划算法 ✨未择之路࿰…...
树莓派Ubuntu系统无显示器配置全攻略:VNC远程桌面与虚拟显示器实战
1. 树莓派Ubuntu系统初始化配置 第一次接触树莓派的朋友可能会觉得这个小玩意儿很神奇,巴掌大的板子居然能跑完整的桌面系统。我当初拿到树莓派4B时也兴奋了好一阵子,但很快发现一个现实问题:不是每个人都有多余的显示器可以长期接在树莓派上…...
5个高效技巧:Plus Jakarta Sans开源字体全方位应用指南
5个高效技巧:Plus Jakarta Sans开源字体全方位应用指南 【免费下载链接】PlusJakartaSans Jakarta Sans is a open-source fonts. Designed for Jakarta "City of collaboration" program in 2020. 项目地址: https://gitcode.com/gh_mirrors/pl/PlusJa…...
解锁B站视频离线观看:BilibiliDown下载神器完全指南
解锁B站视频离线观看:BilibiliDown下载神器完全指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/…...
思欣跃:家长有效帮助孩子改善注意力和识别多动症表现的方法
如何识别儿童多动症的主要症状及表现 识别儿童多动症(ADHD)的主要症状至关重要。首先,注意力缺陷常表现为孩子在完成作业时容易分心,难以坚持做一件事情。如果孩子常在课堂上插嘴或走动,这可能是多动症的迹象。此外&am…...
Ryujinx模拟器技术解析与实践指南
Ryujinx模拟器技术解析与实践指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 价值主张:重新定义主机游戏体验 在当代游戏技术发展历程中,模拟器扮演着连接…...
CANoe.Diva CDD文件配置避坑指南:DTC导入、会话迁移与NRC设置详解
CANoe.Diva CDD文件高阶配置实战:从DTC陷阱到NRC优化的深度解析 当诊断测试用例在CANoe.Diva环境中频繁失败时,往往不是基础配置出错,而是那些隐藏在CDD文件深处的"高级选项"在作祟。本文将带您穿透表面配置,直击五个最…...
Snap.Hutao:如何用这款开源工具箱优化你的原神游戏体验?
Snap.Hutao:如何用这款开源工具箱优化你的原神游戏体验? 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trendin…...
