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

SQLiteOpenHelper数据库帮助器

SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。

1、继承SQLiteOpenHelper类,需要重写onCreate和onUpgrade两个方法

案例:实现增删改查

package com.example.databases_text;import android.app.PictureInPictureParams;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.util.Rational;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.databases_text.R;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener{private EditText edit_name;private  EditText edit_password;private UserDBHelper mUserDBHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit_name=findViewById(R.id.et_name);edit_password=findViewById(R.id.et_pws);findViewById(R.id.btn_add).setOnClickListener(this);findViewById(R.id.btn_del).setOnClickListener(this);findViewById(R.id.btn_update).setOnClickListener(this);findViewById(R.id.btn_query).setOnClickListener(this);}@Overrideprotected void onStart() {super.onStart();//获得数据库帮助器实例mUserDBHelper = UserDBHelper.getInstance(this);mUserDBHelper.openWriteLink();//打开数据库mUserDBHelper.openReadLink();}@Overrideprotected void onDestroy() {super.onDestroy();}@Overridepublic void onClick(View view) {User user = new User();String name=edit_name.getText().toString();String psw=edit_password.getText().toString();switch (view.getId()){case R.id.btn_add:user.setName(name);user.setPassword(psw);if( mUserDBHelper.InsertData(user)>0)Toast.makeText(this,"添加成功", Toast.LENGTH_SHORT).show();break;case R.id.btn_del:user.setName(name);user.setPassword(psw);if( mUserDBHelper.deleteData(user)>0)Toast.makeText(this,"删除成功", Toast.LENGTH_SHORT).show();break;case R.id.btn_update:user.setName(name);user.setPassword(psw);if( mUserDBHelper.updateData(user)>0)Toast.makeText(this,"修改成功", Toast.LENGTH_SHORT).show();break;case R.id.btn_query:List<User> userList=mUserDBHelper.queryData(name);if(userList !=null){edit_password.setText(userList.get(0).getPassword());//userList.get(x).getPassword()表示查询第几个的密码Toast.makeText(this,"查询成功", Toast.LENGTH_SHORT).show();}break;}}
}
package com.example.databases_text;public class User {private  String name;private String password;public User() {}public User(String name, String password) {this.name = name;this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", password='" + password + '\'' +'}';}
}
package com.example.databases_text;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import java.util.ArrayList;
import java.util.List;public class UserDBHelper extends SQLiteOpenHelper {// 数据库版本号public static final int DATABASE_VERSION = 1;// 数据库名称public static final String DATABASE_NAME = "User.db";public static final String DATABASE_table_name = "uer_table";// 用户表名public static final String TABLE_NAME = "user";// 用户名public static final String COLUMN_NAME = "name";// 用户密码public static final String COLUMN_PASSWORD = "password";private static UserDBHelper instance=null;private SQLiteDatabase mRDB=null;private SQLiteDatabase mWDB=null;public UserDBHelper( Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}//利用单例模式,获取数据库的唯一实例,当数据库不存在的时候,经行创建,如果已存在就直接返回public static UserDBHelper getInstance(Context context){if(instance==null){instance=new UserDBHelper(context);}return  instance;}//打开数据库的读连接public SQLiteDatabase openReadLink(){if(mRDB==null || !mRDB.isOpen()) {mRDB = instance.getReadableDatabase();}return mRDB;}//打开数据库的写连接public SQLiteDatabase openWriteLink(){if(mWDB==null || !mWDB.isOpen()) {mWDB = instance.getReadableDatabase();}return mWDB;}//数据库的关闭操作public void closeLink() {if (mRDB != null && mRDB.isOpen()) {mRDB.close();mRDB = null;}if (mWDB != null && mWDB.isOpen()) {mWDB.close();mWDB = null;//置为空为了回收}}//创建数据库,执行sql语句@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {String sql = "create table " + TABLE_NAME + " (" + COLUMN_NAME + " text, " + COLUMN_PASSWORD+ " text)";sqLiteDatabase.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}//添加数据到数据库public long InsertData(User user){ContentValues values = new ContentValues();values.put("name", user.getName());values.put("password", user.getPassword());return   mWDB.insert(TABLE_NAME,null,values);}public long deleteData(User user){//删除所有的return mWDB.delete(TABLE_NAME,"name=? and password=?",new String[]{user.getName(),user.getPassword()});}public long updateData(User user){ContentValues values = new ContentValues();values.put("name", user.getName());values.put("password", user.getPassword());//更改所有符合条件的数据return mWDB.update(TABLE_NAME,values,"name=? ",new String[]{user.getName()});}public List<User> queryData(String name){List<User> list = new ArrayList<>();//查询所有数据,得到游标Cursor cursor =mWDB.query(TABLE_NAME,null,"name=? ",new String[]{name},null,null,null);//逐个取出游标指向的数据while (cursor.moveToNext()){User user1=new User();user1.setName(cursor.getString(0));user1.setPassword(cursor.getString(1));list.add(user1);}return list;}}
<?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:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="用户名"/><EditTextandroid:id="@+id/et_name"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="密码"/><EditTextandroid:id="@+id/et_pws"android:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_add"android:text="添加"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_del"android:text="删除"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_update"android:text="修改"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_query"android:text="查询"/>
</LinearLayout>

2、onUpgrade()是在数据库版本更新时,执行操作。

相关文章:

SQLiteOpenHelper数据库帮助器

SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类&#xff0c;需要重写onCreate和onUpgrade两个方法 案例&#xff1a;实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…...

2024年5月26日 (周日) 叶子游戏新闻

资深开发者&#xff1a;3A游戏当前处于一种尴尬的中间地带游戏行业整体&#xff0c;尤其是3A游戏正处于艰难时期。尽管2023年3A游戏佳作频出&#xff0c;广受好评&#xff0c;但居高不下的游戏开发成本&#xff08;传闻《漫威蜘蛛侠2》的制作成本高达3亿美元&#xff09;正严重…...

STM32-10-定时器

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG 文章目录 一、STM32 基础定时器1. 基本定时器简介2. 基本定时器框图3. 基本定时器相关寄存器4. 定时器溢出…...

今天说的什么好呢

先这样吧...

计算机网络-Traffic-Filter流量过滤策略

一、概述 为提高网络安全性&#xff0c;管理人员需要控制进入网络的流量&#xff0c;将不信任的报文丢弃在网络边界。所谓的不信任报文是指对用户来说存在安全隐患或者不愿意接收的报文。同时保证数据访问安全性&#xff0c;企业网络中经常会要求一些部门之间不能相互访问。 背…...

小白入职 必要熟悉 Git / tortoiseGit 工具

1.安装Git 1.1 了解Git Git是分布式版本控制系统&#xff0c;没有中央服务器的每个人的电脑就是一个完整的版本库&#xff0c;工作时无需联网可多人协作&#xff0c;只需把各自的修改推送给对方&#xff0c;就可以互相看到对方的修改了 分布式版本控制工具管理方式&#xff…...

春秋CVE-2022-23906

简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面&#xff0c;弱口令admin/123456 3.进入后台&#xff0c;文件上传点 4.上传一句话木马图片 5.复制图片&#xf…...

JavaFX安装与使用

前言 最近学习了javafx,开始时在配置环境和导包时遇到了一些麻烦,关于网上很多方法都尝试过了,现在问题都解决了,和大家分享一下我是怎么实现javafx的配置,希望大家可以通过这个方法实现自己的环境配置! &#x1f648;个人主页: 心.c &#x1f525;文章专题:javafx &#x1f49…...

漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)

漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…...

python-项目实战

项目实战 1.外星人入侵小游戏 2.数据可视化 3.web应用开发 一、外星人入侵小游戏 需求: 开发大型项目时&#xff0c;做好规划后再动手编写项目很重要。规划可确保你不偏离轨道&#xff0c;从而提高项目成功的可能性。 在游戏《外星人入侵》中&#xff0c;玩家控制着一艘最…...

单片机原理及技术(一)—— 认识单片机(C51编程)

目录 一、单片机概述 1.1 什么是单片机 1.2 单片机的发展历史 1.3 单片机的特点 1.4 MCS-51 系列与 AT89S5x 系列单片机 1.4.1 MCS-51 系列单片机 1.4.2 AT89S5x 系列单片机 1.5 各种衍生品种的8051单片机 1.5.1 STC 系列单片机 1.5.2 C8051Fxxx 系列单片机 一、单片…...

白嫖的在线工具类宝藏网站清单,快点击进来收藏一波

简单整理了一下自己日常经常使用的10个免费工具网站&#xff0c;建议点赞关注收藏&#xff0c;快点分享给小伙伴们&#xff01; 1.奶牛快传:用户体验更好的网盘工具。 https://cowtransfer.com/ 今年开始使用的一款网盘工具&#xff0c;和百度网盘类似,叫奶牛快传&#xff0c;如…...

【机器学习300问】97、机器学习中哪些是凸优化问题,哪些是非凸优化问题?

在机器学习的领域中&#xff0c;多数模型的参数估计问题实质上可以转化为优化问题。鉴于机器学习模型的多样性&#xff0c;不同的模型会对应着不同的损失函数&#xff0c;进而形成各具特色的优化问题。了解优化问题的形式和特点&#xff0c;对于提升我们求解模型参数的效率和准…...

两种盒模型

在CSS中&#xff0c;有两种主要的盒模型&#xff08;Box Model&#xff09;&#xff0c;它们决定了元素的尺寸计算方式&#xff1a; 标准盒模型&#xff08;W3C Box Model&#xff09; 在标准盒模型中&#xff0c;元素的总宽度和总高度分别由以下几个部分组成&#xff1a; Cont…...

【C++】类型转换

目录 前言一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cast3.4 dynamic_cast3.5 RTTI 前言 本篇文章讲解的是C中对于C语言类型转换做出的一些更好的规范问题&#xff0c;同时也保证了在一些特殊场景下进…...

Redis RDB 持久化问题

前言 Redis 是内存数据库&#xff0c;它将自己的数据储存在内存里面&#xff0c;如果不想办法将储存在内存中的数据保存到磁盘里面&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据也就没了。 因此&#xff0c;Redis 提供了 RDB 持久化功能&#xff0c;这个功能…...

windows 下nginx常用命令

1、启动&#xff0c;目录cmd&#xff0c;后 start nginx.exe 2.重新加载 nginx -s reload 3.查看状态 tasklist /fi “imagename eq nginx.exe” 4.关闭 nginx -s quit...

xjoi题库一级1-10段题解(c语言版)

xjoi题库一级一段 xjoi题库一级二段 xjoi题库一级三段 xjoi题库一级四段 xjoi题库一级五段...

1.int 与 Integer 的简单区别

蓝桥杯刷题从此开始&#xff1a; 第一题就是两个数的和&#xff0c;个人看来主要考察 int与integer 的区别&#xff1b; 这是我提交的答案&#xff0c;竟然会报错&#xff1a; import java.util.*; //输入A、B&#xff0c;输出AB。 class add {public static void main(String …...

单片机原理及技术(二)—— AT89S51单片机(一)(C51编程)

目录 一、AT89S51单片机的片内硬件结构 二、AT89S51的引脚功能 2.1 电源及时钟引脚 2.2 控制引脚 2.3 并行 I/O口引脚 三、AT89S51的CPU 3.1 运算器 3.1.1 算术逻辑单元&#xff08;ALU&#xff09; 3.1.2 累加器A 3.1.3 程序状态字寄存器&#xff08;PSW&#xff09…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...