android:数据库的增删改查

news/2024/3/28 20:45:16/文章来源:https://blog.csdn.net/Rssqzqyp/article/details/131529658

一、前言:数据库学的真的很让人烦躁,一边看视频一边写代码,还有好多代码是什么意思我都不知到。这篇文章是对Android自带的数据库的操作,有数据的增加,删除,修改,查询的操作。

二、废话不多说上代码

首先界面布局xml

<?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"android:padding="5dp"tools:context=".share.ShareWriteActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="姓名:"android:textColor="@color/black"android:textSize="17dp" /><EditTextandroid:id="@+id/et_name"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:hint="请输入姓名"android:textColorHint="@color/gray" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="年龄:"android:textColor="@color/black"android:textSize="17dp" /><EditTextandroid:id="@+id/et_age"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:hint="请输入年龄"android:textColorHint="@color/gray" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="身高:"android:textColor="@color/black"android:textSize="17dp" /><EditTextandroid:id="@+id/et_height"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:hint="请输入身高"android:textColorHint="@color/gray" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="体重:"android:textColor="@color/black"android:textSize="17dp" /><EditTextandroid:id="@+id/et_weight"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:hint="请输入体重"android:textColorHint="@color/gray" /></LinearLayout><CheckBoxandroid:id="@+id/ck_married"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="已婚" /><Buttonandroid:id="@+id/btn_save"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="增加" /><Buttonandroid:id="@+id/btn_delete"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="删除" /><Buttonandroid:id="@+id/btn_update"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="修改" /><Buttonandroid:id="@+id/btn_query"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="查询" /></LinearLayout>

对应的Activity:SQLiteHelperActivity.java

public class SQLiteHelperActivity extends AppCompatActivity implements View.OnClickListener {private EditText et_name;private EditText et_age;private EditText et_height;private EditText et_weight;private CheckBox ck_married;private UserDBHelper mHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sqlite_helper);et_name = findViewById(R.id.et_name);et_age = findViewById(R.id.et_age);et_height = findViewById(R.id.et_height);et_weight = findViewById(R.id.et_weight);ck_married = findViewById(R.id.ck_married);findViewById(R.id.btn_save).setOnClickListener(this);findViewById(R.id.btn_delete).setOnClickListener(this);findViewById(R.id.btn_update).setOnClickListener(this);findViewById(R.id.btn_query).setOnClickListener(this);}@Overrideprotected void onStart() {super.onStart();//获得数据库帮助器的实例mHelper = UserDBHelper.getInstance(this);//打开数据库的读写链接mHelper.openWriteLink();mHelper.openReadLink();}@Overrideprotected void onStop() {//界面不可见,退出到后台了super.onStop();//关闭数据库链接mHelper.closeLink();}@Overridepublic void onClick(View view) {String name = et_name.getText().toString();String age = et_age.getText().toString();String height = et_height.getText().toString();String weight = et_weight.getText().toString();User user = null;switch (view.getId()) {case R.id.btn_save://以下声明一个用户信息对象,并填写他的各个字段值user = new User(name,Integer.parseInt(age),Long.parseLong(height),Float.parseFloat(weight),ck_married.isChecked());if (mHelper.insert(user)>0){ToastUtil.show(this,"添加成功");}mHelper.insert(user);break;case R.id.btn_delete:if (mHelper.deleteByName(name)>0) {Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();}break;case R.id.btn_update:user = new User(name,Integer.parseInt(age),Long.parseLong(height),Long.parseLong(weight),ck_married.isChecked());if (mHelper.update(user)>0){Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();}break;case R.id.btn_query:List<User> list = mHelper.queryAll();for (User u:list){Log.d("ming", u.toString());}break;}}
}

新建一个包entity---------在这个包下面新建一个类User

public class User {public int id;//序号public String name;//姓名public int age;public Long height;//身高public float weight;//体重public boolean married;//婚否public User(){}public User(String name,int age, Long height, float weight, boolean married) {this.name = name;this.age = age;this.height = height;this.weight = weight;this.married = married;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", height=" + height +", weight=" + weight +", married=" + married +'}';}
}

新建一个包base----------在这个包下面新建一个类UserDBHelper.java

public class UserDBHelper extends SQLiteOpenHelper {/*** 当我们继承SQLiteOpenHelper时会报错我们实现完其中的两个方法的时候还是会报错这是什么原因* 需要调用父类的构造方法(在子类中去调用父类的构造方法)* @param sqLiteDatabase*/private static final String DB_NAME = "user.db";private static final String TABLE_NAME = "user_info";private static final int DB_VERSION = 1;private static UserDBHelper mHelper;private SQLiteDatabase mRDB = null;private SQLiteDatabase mWDB = null;private UserDBHelper(Context context){super(context,DB_NAME,null,DB_VERSION);}//利用单例模式获取数据库帮助器的唯一实例public static UserDBHelper getInstance(Context context){if (mHelper == null){mHelper = new UserDBHelper(context);}return mHelper;}//打开数据库的读链接public SQLiteDatabase openReadLink(){if (mRDB == null || mRDB.isOpen()){mRDB = mHelper.getReadableDatabase();}return mRDB;}//打开数据库的写链接public SQLiteDatabase openWriteLink(){if (mWDB == null || mWDB.isOpen()){mWDB = mHelper.getWritableDatabase();}return mWDB;}//关闭数据库链接public void closeLink(){if (mRDB != null && mRDB.isOpen()){mRDB.close();mRDB = null;}if (mWDB != null && mWDB.isOpen()){mWDB.close();mWDB = null;}}//创建数据库执行建表语句@Overridepublic void onCreate(SQLiteDatabase db) {String sql ="CREATE TABLE IF NOT EXISTS "+ TABLE_NAME+"("+"_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+"name VARCHAR NOT NULL,"+"age INTEGER NOT NULL,"+"height LONG NOT NULL,"+"weight FLOAT NOT NULL,"+"married INTEGER NOT NULL);";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}public Long insert (User user){ContentValues values = new ContentValues();values.put("name",user.name);values.put("age",user.age);values.put("height",user.height);values.put("weight",user.weight);values.put("married",user.married);return mWDB.insert(TABLE_NAME,null,values);}public long deleteByName(String name){//删除所有
//        mWDB.delete(TABLE_NAME,"1=1",null);return mWDB.delete(TABLE_NAME,"name=?",new String[]{name});}public long update(User user){ContentValues values = new ContentValues();values.put("name",user.name);values.put("age",user.age);values.put("height",user.height);values.put("weight",user.weight);values.put("married",user.married);return mWDB.update(TABLE_NAME,values,"name=?",new String[]{user.name});//更新影响了多少行}public List<User> queryAll(){List<User> list = new ArrayList<>();//执行记录查询动作,该语句返回结果集的游标Cursor cursor = mRDB.query(TABLE_NAME,null,null,null,null,null,null);//循环取出游标指向的每一条记录User user = new User();while (cursor.moveToNext()){user.id = cursor.getInt(0);user.name = cursor.getString(1);user.age = cursor.getInt(2);user.height = cursor.getLong(3);user.weight = cursor.getFloat(4);//SQLite没有布尔类型,用0表示false,用1表示trueuser.married = (cursor.getInt(5) == 0) ? false :true;}return list;}
}

三、总结:学习数据库真的很枯燥,他没有之前android控件学的让人开心。写完这篇文章肯定不意味着结束学习,它大概意味着新的领域新的挑战。希望我写的这些东西能帮到更多人。

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

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

相关文章

Vault AppRole最佳实现过程

AppRole AppRole身份验证方法允许机器或应用程序使用 Vault 定义的角色进行身份验证。AppRole 的开放式设计支持使用不同的工作流和配置来应对大量应用程序。这种身份验证方法主要是面向自动化工作流程(机器和服务)设计的,对人类操作者不太有用。 “AppRole”代表一组 Vau…

clickhouse日志表占用大量磁盘空间

clickhouse日志表占用大量磁盘空间 sql&#xff1a; SELECT sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes) / sum(data_uncompresse…

linux 操作系统内核态用户态

1. 32位系统一个进程最多有多少堆内存 对 32 位操作系统而言&#xff0c;它的寻址空间是4G&#xff08;2的32次方&#xff09;&#xff0c;Linux把它分为两部分&#xff1a;最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身&#xff0c;成为“内核空间”&#xff0c;而…

【全文搜索选型】全文搜索 PostgreSQL 或 ElasticSearch

在本文中&#xff0c;我记录了在 PostgreSQL&#xff08;使用 Django ORM&#xff09;和 ElasticSearch 中实现全文搜索 (FTS) 时的一些发现。 作为一名 Django 开发人员&#xff0c;我开始寻找可用的选项来在大约一百万行的标准大小上执行全文搜索。有两个值得尝试的选项&…

新发布的 DBeaver 23.1.1 版本正式支持时序数据库 TDengine

众所周知&#xff0c;DBeaver 是一个流行的开源数据库管理和 SQL 客户端工具&#xff0c;为管理和使用各种类型的数据库&#xff08;包括多个时序数据库&#xff09;提供强大而灵活的平台。为了让大家在应用上更加便捷&#xff0c;我们与 DBeaver 达成合作&#xff0c;新发布的…

【ARM】-IRQ 和 FIQ 异常中断处理程序的返回

文章目录 处理流程示例代码实现 处理流程 通常处理器执行完当前指令后&#xff0c;查询 IRQ 中断引脚及 FIQ 中断引脚&#xff0c;并且查看系统是否允许 IRQ 中断及 FIQ中断。 如果有中断引脚有效&#xff0c;并且系统允许该中断产生&#xff0c;处理器将产生 IRQ 异常中断或 …

【直播预告】HarmonyOS极客松赋能直播第四期:HarmonyOS开发经验分享

直播预约通道&#xff1a;【直播预告】HarmonyOS极客松赋能直播第四期&#xff1a;HarmonyOS开发经验分享

为什么从 MVC 到 DDD,架构的本质是什么?

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 本文来自于小傅哥新编写的 《Java简明教程》 系列内容&#xff0c;本教程意在于通过简单、明了、清晰的成体系内容&#xff0c;教…

IP 扫描程序:轻松发现、扫描和跟踪 IP 空间

什么是 IP 扫描 IP 扫描是实时持续监控网络 IP 地址空间的过程。包括 ICMP ping 扫描和 SNMP 扫描在内的网络协议数量用于扫描网络中的 IP 地址。网络管理员依靠 IP 扫描程序轻松检查和管理 IP 地址空间。使用网络 IP 扫描程序进行 IP 扫描可查看 IP 地址空间利用率和性能。 …

网络io模型、同步异步及libuv

网络io模型及基础概念 概念说明 用户空间与内核空间 操作系统的核心是内核&#xff0c;独立于普通的应用程序&#xff0c;可以访问受保护的内存空间&#xff0c;也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核&#xff08;kernel&#xff09;&#xff0…

Unity3D:工具栏

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 工具栏 在 Unity Editor 顶部可以看到工具栏。 工具栏不是窗口&#xff0c;是 Unity 界面中唯一无法重新排列的部分。 有关场景视图中的其他工具&#xff0c;请参阅叠加。 工具栏…

微服务:Springboot集成Hystrix实现熔断、降级、隔离

文章目录 前言知识积累Springboot集成Hystrix1、maven依赖引入2、application开启feign的hystrix支持&#xff08;客户端配置限流降级熔断&#xff09;3、入口类增加EnableFeignClients EnableHystrix 开启feign与hystrix4、feign调用增加降级方法服务端配置限流降级熔断(选择使…

中移物联车联网项目,在 TDengine 3.0 的应用

小T导读&#xff1a;在中移物联网的智慧出行场景中&#xff0c;需要存储车联网设备的轨迹点&#xff0c;还要支持对车辆轨迹进行查询。为了更好地进行数据处理&#xff0c;他们在 2021 年上线了 TDengine 2.0 版本的 5 节点 3 副本集群。 3.0 发布后&#xff0c;它的众多特性吸…

关于visual studio 2010 及以上版本 引入boost库的最新解决方法

之前没有怎么用到boost库&#xff0c;出来实习需要去编译一些代码&#xff0c;需要引入boost第三方库&#xff0c;在这过程中&#xff0c;一直出现 LINK : fatal error LNK1104: 无法打开文件“libboost_filesystem-vc100-mt-gd-x3 错误&#xff0c; 但是也确实是跟其他教程学过…

myCobot机器人ChatGPT应用:设计原则和模型能力

我们将 ChatGPT 的功能扩展到机器人&#xff0c;并通过语言直观地控制机器人手臂、无人机和家庭助理机器人等多个平台。 你有没有想过用你自己的话告诉机器人该怎么做&#xff0c;就像你对人类一样&#xff1f;只是告诉你的家庭助理机器人&#xff1a;“请加热我的午餐”&…

MYSQL根据标签查询数据

场景条件&#xff1a; 1.根据用户id查询到该id绑定的标签&#xff08;可能是多个标签也可能是单个标签&#xff09; 2.根据标签的id查询到绑定标签id的信息表 SELECT labelID FROM LRrelation WHERE relationID 1 SELECT * FROM notification SELECT * FROM notification…

6.30学习-函数柯里化,回调解决异步多线程

6.30学习-函数柯里化&#xff0c;回调解决异步多线程 1.函数柯里化1.1 确定参数的函数柯里化1.2参数不确定的函数柯里化1.3 用法1.3.1 给setTimeout传递进来的函数添加参数 2.回调解决异步多线程 1.函数柯里化 函数柯里化&#xff0c;经常可能就面试的时候听说过&#xff0c;反…

如何在半导体行业运用IPD?

半导体产业链具体包括上游半导体原材料与设备供应、中游半导体产品制造和下游应用。其中&#xff0c;半导体材料处于上游供应环节&#xff0c;材料品类繁多&#xff0c;按制造流程可细分为前端制造材料和后端封装材料。半导体设备&#xff0c;即在芯片制造和封测流程中应用到的…

智谱AI-算法实习生(知识图谱方向)实习面试记录

岗位描述 没错和我的经历可以说是match得不能再match了&#xff0c;但是还是挂了hh。 面试内容 给我面试的是唐杰老师的博士生&#xff0c;方向是社交网络数据挖掘&#xff0c;知识图谱。不cue名了&#xff0c;态度很友好的 &#xff0c;很赞。 date&#xff1a;6.28 Q1 自…

服务器解析漏洞与cms靶场搭建教程

文章目录 一、解析漏洞定义1.CVE-2017-157152.AddHandler3.IIS64.IIS75.nginx 二、Kali安装docker并搭建DVWA靶场1.安装docker2.启动docker3.安装docker的DVWA容器4.启动dvwa 三、kali搭建vulhub与CVE-2017-15715复现1.安装vulhub2.安装CVE-2017-15715漏洞利用靶场3.启动靶场4.…