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

android studio 连接SQLite数据库并实现增删改查功能

功能代码及调试代码

package com.example.bankappdemo;import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.ListView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;import pl.com.salsoft.sqlitestudioremote.SQLiteStudioService;public class CreatAccountActivity extends AppCompatActivity {private EditText mCreatConfirmPasswordEditText;private EditText mCreatPassWordEditText;private EditText mMconfirmPasswordEditText;private Button mReturnbutton;private Button mConfirmMagbutton;private DBHelper mDBHelper;private static final String DB_NAME = "Account.db";//数据库名private static final String TABLE_NAME = "User";//表名private static final String COLUMN_ID = "id";private static final String TAG = "CreatAccountActivity";public void isNameExist(int id) {//判断用户名是否重复try {SQLiteStudioService.instance().start(this);DBHelper helper = new DBHelper(CreatAccountActivity.this);SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from User where ID=?", new String[]{"id"});cursor.moveToLast();if (cursor.getCount() <= 0) {Toast.makeText(CreatAccountActivity.this, "用户不存在", Toast.LENGTH_SHORT).show();}} catch (Exception e) {e.printStackTrace();}Toast.makeText(CreatAccountActivity.this, "用户存在", Toast.LENGTH_SHORT).show();}//插入数据到数据库public void addAccountSQlite(String name, String pwd, int id) {SQLiteStudioService.instance().start(this);DBHelper helper = new DBHelper(CreatAccountActivity.this);SQLiteDatabase db = helper.getReadableDatabase();String sql = "insert into User values(" + id + ',' + name + ',' + pwd + ',' + 0.0 + ")";db.execSQL(sql);db.close();Toast.makeText(CreatAccountActivity.this, "账户创建成功", Toast.LENGTH_SHORT).show();}//删除账户public void delAllAccount(int id) {SQLiteStudioService.instance().start(this);DBHelper helper = new DBHelper(CreatAccountActivity.this);SQLiteDatabase db = helper.getWritableDatabase();db.delete(TABLE_NAME, "ID=" + id, null);//db.close();Toast.makeText(CreatAccountActivity.this, "删除所有账户成功", Toast.LENGTH_SHORT).show();}//更新数据public void updateData(String name, String pwd, int id, Double money) {SQLiteStudioService.instance().start(this);DBHelper helper = new DBHelper(CreatAccountActivity.this);SQLiteDatabase db = helper.getWritableDatabase();String sql = "update User set name = " + name + " ,password = " + pwd + " ,money = " + money + " where id = " + id;db.execSQL(sql);Toast.makeText(CreatAccountActivity.this, "更新账户信息成功", Toast.LENGTH_SHORT).show();}//根据ID查找数据public void query(int id) {SQLiteStudioService.instance().start(this);DBHelper helper = new DBHelper(CreatAccountActivity.this);SQLiteDatabase db = helper.getWritableDatabase();String rawQuerySql = "select * from " + TABLE_NAME + " where " + COLUMN_ID + " = " + id + " or " + COLUMN_ID + " = 2";Log.e(TAG, rawQuerySql);/***   Cursor cursor = helper.getWritableDatabase().rawQuery(rawQuerySql, null);*   int resultCounts = cursor.getCount();* 通过执行SQL查询语句获取结果集的行数* 通过helper.getWritableDatabase()方法获取可写的SQLiteDatabase对象* 使用rawQuery()方法执行查询语句,将结果保存在Cursor对象中* 通过调用cursor.getCount()方法获取结果集的行数,将结果保存在resultCounts变量中* 最后,可以根据resultCounts的值来判断查询结果的行数*/Cursor cursor = helper.getWritableDatabase().rawQuery(rawQuerySql, null);int resultCounts = cursor.getCount();//遍历每一行for (int i = 0; i < resultCounts; i++) {//得到的cursor的初始位置是指向第一条记录的前一个位置的(-1),避免出现下标越界异常,使用moveToNext:移动游标到下一条记录,也就是第一条记录cursor.moveToNext();Account stAccount = new Account();int nId = cursor.getInt(0);//ID是第一列String strUsername = cursor.getString(1);//名字是第二列String strPassword = cursor.getString(2);//密码是第三列Double dMoney = cursor.getDouble(3);//余额是第四列stAccount.setId(nId);stAccount.setUserName(strUsername);stAccount.setPassWord(strPassword);stAccount.setMoney(dMoney);Log.e(TAG, stAccount.toString());}Toast.makeText(CreatAccountActivity.this, "信息查询成功", Toast.LENGTH_SHORT).show();}protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.creataccount);mConfirmMagbutton = findViewById(R.id.confirmMagbutton);mConfirmMagbutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//调试信息String name = ((EditText) findViewById(R.id.creatUserNameEditText)).getText().toString();String pwd = ((EditText) findViewById(R.id.creatPassWordEditText)).getText().toString();int id = 3;//ContentValues values = new ContentValues();// addAccountSQlite(name, pwd, id);//  delAllAccount(1);updateData("2","2",2,6000.00);// query(3);//  isNameExist(1);}});}
}

DBHelper类

package com.example.bankappdemo;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;public class DBHelper extends SQLiteOpenHelper {private static final String TAG = "DBHelper";private Context context;//上下文环境private static final String DB_NAME = "Account.db";//数据库名private static final int DB_VERSION = 1;//数据库版本号private static final String TABLE_NAME = "User";//表名private Context mContext;// 列名称private static final String COLUMN_ID = "id";private static final String COLUMN_NAME = "name";private static final String COLUMN_PASSWORD = "password";private static final String COLUMN_MONEY = "money";public DBHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {// 创建数据库表String createTableQuery = "create table if not exists " + TABLE_NAME + "(" + COLUMN_ID +" int primary key, " + COLUMN_NAME + " varchar, " + COLUMN_PASSWORD + " varchar, " + COLUMN_MONEY + " double)";Log.e(TAG, "建表语句:" + createTableQuery);db.execSQL(createTableQuery);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 升级数据库版本if (oldVersion < newVersion) {// 执行升级操作,例如添加新的表或修改表结构}}}

相关文章:

android studio 连接SQLite数据库并实现增删改查功能

功能代码及调试代码 package com.example.bankappdemo;import android.annotation.SuppressLint; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; im…...

跑步适合戴什么样的耳机、最好的跑步耳机推荐

每个人对于运动的方式都不尽相同&#xff0c;但大多数热爱运动的朋友都离不开音乐的陪伴。运动和带有节奏感的音乐能够激发我们更多的热情和动力。特别是在夏日的时候&#xff0c;我非常喜欢跑步。在酷热的天气里&#xff0c;如果没有音乐的伴随&#xff0c;跑步会变得单调乏味…...

物联网的通信协议

物联网的通信协议 目录 物联网的通信协议一、UART串口通信1.1 串口通信1.2 异步收发1.3 波特率1.4 串口通信协议的数据帧1.5 优缺点1.5.1 优点1.5.2 缺点 二、I^2^C2.1 I^2^C2.2 I^2^C2.3 数据有效性2.4 起始条件S和停止条件P2.5 数据格式2.6 协议数据单元PDU2.7 优缺点2.7.1 优…...

【业务功能篇56】SpringBoot 日志SLF4J Logback

3.5.1 日志框架分类与选择 3.5.1.1 日志框架的分类 日志门面 (日志抽象)日志实现JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java)Jul(Java Util Logging) , Log4j , Log4j2 , Logback 记录型日志框架 Jul (Java Util Logging)&#xff1a;JDK中的日志…...

leetcode 53. 最大子数组和

2023.7.28 要求找最大和的 连续子数组&#xff0c; 我的思路是用一个temp记录局部最优值&#xff0c;用ans记录全局最优值。 然后在每次for循环进行一个判断&#xff1a;当前遍历元素temp值 是否大于当前遍历元素的值&#xff0c;如果大于&#xff0c;说明temp值是帮了正忙的&a…...

js 下载url返回的excel数据,并解析为json

XLSX GitHub地址&#xff1a;https://github.com/SheetJS/sheetjs/blob/github/dist/xlsx.full.min.js 需要先引入&#xff1a;XLSX.full.min.js // 下载文件的请求 fetch(downloadFileUrl).then(response > {return rsp.blob() }).then(data > {let reader new FileR…...

图文教程:使用 Photoshop、3ds Max 和 After Effects 创建被风暴摧毁的小屋

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 在 Photoshop 中设置图像 步骤 1 打开 Photoshop。 打开 Photoshop 步骤 2 我已经将小屋的图像导入到Photoshop中以演示 影响。如果您愿意&#xff0c;可以使用其他图像。 图片导入 步骤 3 由于小…...

学习Maven Web 应用

Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目&#xff0c;如何创建、构建、部署已经运行一个 web 应用。 创建 Web 应用 我们可以使用 maven-archetype-webapp 插件来创建一个简单的 Java web 应用。 打开命令控制台&#xff0c;…...

page allocation stalls for 问题调研

一.现象分析和内存管理基本概念介绍 最近有一台linux出现卡死的状态,系统不反应,无法ssh登录,只能通过电源关机重启操作恢复,重启后登录系统后台,拉取kernel日志,如下 Jul 12 18:48:06 kernel: [141294.374983] send process: page allocation stalls for 10108ms, orde…...

JUC并发工具类

一、ReentrantLock 特点&#xff1a;独占、可重入、公平/非公平、可中断、支持多个条件变量 1、常用api ReentrantLock实现了Lock接口&#xff0c;Lock类规范定义了如下方法 lock()&#xff1a;获取锁&#xff0c;调用该方法的线程会获取锁&#xff0c;当锁获得后&#xff0…...

【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU

早上百度搜“神经网络KPU”&#xff0c;查到与非网的一篇文章《一文读懂APU/BPU/CPU/DPU/EPU/FPU/GPU等处理器》&#xff0c;介绍各种处理器非常详细&#xff0c;关于“KPU”的内容如下&#xff1a; KPU Knowledge Processing Unit。 嘉楠耘智&#xff08;canaan&#xff09;号…...

MySQL~SQL语句

一、SQL 1.什么是SQL&#xff1f; Structured Query Language&#xff1a;结构化查询语言 每一种数据库操作的方式存在不一样的地方&#xff0c;称为“方言”。 2.SQL通用语法 SQL 语句可以单行或多行书写&#xff0c;以分号结尾 可使用空格和缩进来增强语句的可读性 MyS…...

从零开始构建基于YOLOv5的目标检测系统

本博文从零开始搭建基于YOLOv5模型的目标检测系统&#xff08;具体系统参考本博主的其他博客&#xff09;&#xff0c;手把手保姆级完成环境的搭建。 &#xff08;1&#xff09;首先Windows R输入cmd命令后打开命令窗口&#xff0c;进入项目目录&#xff0c;本博文以野生动物…...

PDF尺寸修改:等比绽放(标准面单100*150mm)

PDF修改尺寸 需要注意&#xff1a;第一个方法返回的是转换后PDF的base64。第二个方法返回的是文件流&#xff0c;这个方法才是转的核心。 /*** 修改PDF尺寸** param pdfUrl PDF链接* param pdfWidthInMillimeters 指定宽 mm* param pdfHeightInMillimeters 指…...

C++ - list介绍 和 list的模拟实现

list介绍 list 是一个支持在常数范围内&#xff0c;任意位置进行插入删除的序列式容器&#xff0c;且这个容器可以前后双向迭代。我们可以把 list 理解为 双向循环链表的结构。 于其他结构的容器相比&#xff0c;list在 任意位置进行插入和函数的效率要高很多&#xff1b;而li…...

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…...

深度学习初探

1.深度学习模型训练过程 1&#xff09;数据&#xff08;数据清洗标注&#xff09; 2&#xff09;模型&#xff08;模型的构建和初始化&#xff09; 3&#xff09;损失&#xff08;前向传播的过程&#xff0c;得到模型的输出和真实标签的差异值&#xff0c;称之为损失&#x…...

nn.BCELoss与nn.CrossEntropyLoss

BCELoss与CrossEntropyLoss都是用于分类问题。可以知道&#xff0c;BCELoss是Binary CrossEntropyLoss的缩写&#xff0c;BCELoss是CrossEntropyLoss的一个特例&#xff0c;只用于二分类问题&#xff0c;而CrossEntropyLoss可以用于二分类&#xff0c;也可以用于多分类&#xf…...

CSDN浏览如何解决

一、对于平时我们苦恼csdn数据不够好看 当面试等各个场合需要我们装*或者秀技术无法拿出亮眼的时候&#xff0c;刚好我闲时间编译的在线模块适合你 二、如何操作&#xff08;虚拟平台我已给大家放到最后直接使用即可&#xff09; 重点&#xff1a;pc端必须拥有python环境 win…...

web前端开发小知识

当今互联网技术迅猛发展&#xff0c;web前端开发也成为了非常热门的职业之一。作为一个web前端开发者&#xff0c;不仅需要掌握各种前端开发技术&#xff0c;还需要了解一些小技巧和小知识。下面&#xff0c;我们将介绍一些web前端开发小知识&#xff0c;希望对你的工作有所帮助…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...