SQLite数据库

article/2025/10/17 9:24:20

目录

SQLite数据库

在Android中的使用

SQLiteOpenHelper中的方法

增删改查

添加数据 insert()

查询数据 query(),rawQuery()

查询和添加案例

数据库帮助类:

MainActivity:

Activity_main.xml:

SQLite数据库

        SQLite是一个轻量级的嵌入数据库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。您不需要在系统中安装配置。SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件

Android中的使用

        Android为了让用户能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类,借助这个类就可以非常简单地对数据库进行创建。SQLiteOpenHelper是一个抽象类,这意味着如果想使用它的话,这就需要自己 创建一个类去继承SQLiteOpenHelper帮助类就可以了

class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version: Int) : SQLiteOpenHelper(context,name,factory,version) {
}

        SQLiteOpenHelper有三个构造方法可供重写,一般使用参数少点的那个构造方 法即可,必须要有它才能对数据库进行操作,这个构造方法中,接受4个参数

Cursor游标结果集

        游标是一段私有的SQL工作区,即一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时存放到一个内存区域的虚表中,这个虚表就是游标。

        游标在数据库的事务回滚中有非常重要的作用。由于对数据库的操作会暂时存放在游标中,只要不提交,就可以根据游标中的内容进行回滚。这样有利于数据库的安全。

SQLiteOpenHelper中的方法

        SQLiteOpenHelper  有两个抽象方法 onCreate() onUpgrade()。我们必须在自己的帮助类中重写这两个方法。除外,其中还有两个重要的实例方法getReadableDatabase()getWritableDatabase()

        这两个方法都可以创建或打开一个现有的数据库(如果一个数据库存在则直接打开,否则新建一个新的数据库),并返回一个可以对数据库进行读 [] 操作的对象。不同的是:当数据库不可写入(如磁盘空间满时),getReadableDatabase()返回的对象是将以只读方式打开数据库,另一个会抛出一个异常

class MyDBOpenHelper(context:Context,name:String,factory:CursorFactory,version: Int): SQLiteOpenHelper(context,name,factory,version) {//创建数据库override fun onCreate(db: SQLiteDatabase?) {//可能为null要用空安全操作 >>> ?.db?.execSQL("create table stu_info(" +"id INTEGER primary key autoincrement," +"sex varchar(10)," +"name varchar(20))")}//升级数据库override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {}
}

增删改查

        对数据库中的数据表的操作,一共有四种:添加、查询、更新、删除。每一种 操作又各自对应了一种SQL命令:insert(添加),select(查询),update(更新),delete(删除)。

添加数据 insert()

方法有三个参数

  1. 第一个参数表名
  1. 第二个参数是某些为空的列自动赋值
  1. 第三个参数是ContentValue对象,它提供了一系列put()方法重载,用于向ContentValues中添加对象,只需要将表中的每个列名以及相应的待添加的数 据传入即可。

查询数据 query(),rawQuery()

  1. query(表名, 要查询出来的列名, 查询条件, 对应于selection语句中占位符的值, groupBy, having, orderBy, limit)
  1. rawQuery(sql语句String[ ]  是?的条件参数,如果?这个内占位符容为null的话就表示把所有的都查出来)

查询和添加案例

创建stu_db数据库和stu_info学生表,对表进行添加和动态查询操作,效果图:

数据库帮助类:

class MyDBOpenHelper(context:Context): SQLiteOpenHelper(context,"stu_db",null,1) {//创建数据库override fun onCreate(db: SQLiteDatabase?) {//db要用空安全操作?.db?.execSQL("create table stu_info(" +"id INTEGER primary key autoincrement," +"sex varchar(10)," +"name varchar(20))")}//升级数据库override fun onUpgrade(db: SQLiteDatabase?, p1: Int, p2: Int) {}
}

MainActivity

class MainActivity : AppCompatActivity() {private var result = "" //反馈文本字符串private var myDBHelper:SQLiteOpenHelper?= null//定义数据库帮助类对象private var db:SQLiteDatabase?=null//定义一个可以操作的数据库对象override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initView() //初始化方法butAdd() //添加按钮监听器butQuery() // 查询按钮监听器}//初始化方法fun initView(){myDBHelper = MyDBOpenHelper(this)//实例化数据库帮助类db = myDBHelper?.writableDatabase //创建获取可读写操作的数据库}//添加按钮监听器fun butAdd(){insert?.setOnClickListener {var contentValues = ContentValues() //用 contentValue 表示一行//把输入的id,name,sex放到对应的列contentValues.put("id",idText.text.toString())contentValues.put("name",nameText.text.toString())contentValues.put("sex",sexText.text.toString())//调用insert()添加var insert = db?.insert("stu_info", null, contentValues)//提示框if(insert!=null){Toast.makeText(this,"添加成功!",Toast.LENGTH_SHORT).show()}else{Toast.makeText(this,"添加失败!",Toast.LENGTH_SHORT).show()}}}// 查询按钮监听器fun butQuery(){query?.setOnClickListener {var paramName:String = "id" //定义查询条件,默认根据id查询var arrayOf = arrayOf<String?>(null) //查询条件参数数组//如果id未输入根据 name查 ?: sex查if (idText?.text.toString()!=""){arrayOf[0]=idText?.text.toString() //获取id框数据,放入数组}else if(nameText?.text.toString()!=""){paramName = "name"arrayOf[0]=nameText?.text.toString()//获取name框数据,放入数组}else if(sexText?.text.toString()!=""){paramName = "sex"arrayOf[0]=sexText?.text.toString()//获取sex框数据,放入数组}//调用rawQuery传入sql和参数,获取cursor结果集var cursor = db?.rawQuery("select * from stu_info where ${paramName}=?" , arrayOf)if (cursor?.count!=0){result = "" //清空结果反馈字符串//遍历结果集,追加反馈文本字符串while (cursor?.moveToNext() == true){result = "${result}\n" +"学号:${cursor.getString(0)} 性别:${cursor.getString(1)} 姓名:${cursor.getString(2)}\n" +">>>>>>>>>>>"}tv.text = result//tv框打印反馈字符串}else{//如果结果集为空,tv打印对应提示tv.text = "${paramName}=${arrayOf[0]},不存在"}}}
}

Activity_main.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"tools:context=".MainActivity"android:orientation="vertical"><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="(^-^)"android:textSize="20sp"android:layout_margin="40dp"android:layout_gravity="center"/><EditTextandroid:hint="学号:"android:id="@+id/idText"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditTextandroid:hint="姓名:"android:id="@+id/nameText"android:layout_width="match_parent"android:layout_height="wrap_content"/><EditTextandroid:hint="性别:"android:id="@+id/sexText"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/insert"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="添加"android:textSize="25sp"android:layout_margin="2dp"android:layout_weight="1"/><Buttonandroid:id="@+id/clear"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="清除"android:textSize="25sp"android:layout_margin="2dp"android:layout_weight="1"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/query"android:layout_margin="3dp"android:layout_weight="1"android:text="查询"android:textSize="25sp"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>
</LinearLayout>


http://chatgpt.dhexx.cn/article/IQrs95gJ.shtml

相关文章

SQLite 安装与使用

在 Windows 上安装 SQLite 什么是SQLite SQLite是一款非常轻量级的关系数据库系统&#xff0c;支持多数SQL92标准。SQLite在使用前不需要安装设置&#xff0c;不需要进程来启动、停止或配置&#xff0c;而其他大多数SQL数据库引擎是作为一个单独的服务器进程&#xff0c;被程序…

【Android】SQLite

1&#xff0c;概述 android端提供的轻量级数据库&#xff0c; 2&#xff0c;实例I &#xff08;1&#xff09;创建SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelper {private static DBHelper sDBHelper;public static void init(Nullable Context contex…

Android之SQLite数据库的使用

SQLite是比较小而功能比较全的关系型数据库&#xff0c;下面介绍一下SQLite数据库的使用方法&#xff0c;及增删改查操作。 创建一个Android项目&#xff1b; 首先我们需要创建一个DatabaseHelper这个助手类&#xff0c;源码&#xff1a; package cn.android.sword.sqlite.db…

android使用SQLite

文章目录 1.SQLite的特点2.SQLite的使用2.1数据库的创建2.2新增&#xff08;insert)2.3修改&#xff08;update)2.4删除(delete)2.5查询(query) 3.使用SQL语句进行数据库操作4.SQLite事务 1.SQLite的特点 SQLite是一个轻量级数据库&#xff0c;它设计目标是嵌入式的&#xff0…

Android 操作SQLite基本用法

在Android 开发中SQLite起着很重要的作用&#xff0c;网上SQLite的教程有很多很多&#xff0c;不过那些教程大多数都讲得不是很全面。本人总结了一些SQLite的常用的方法&#xff0c;借着论坛的大赛&#xff0c;跟大家分享分享的。 一.SQLite的介绍 1.SQLite简介 SQLite是一…

Android中SQLite应用详解

上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite。 现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到…

Android SQLite基本用法(极简)

前言 SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库不一样&#xff0c;您不需要在系统中配置。就像其他数据库&#xff0c;SQLite 引擎不是一个独立的进程&am…

SQLite数据库可视化工具【SQLiteStudio】的下载及安装

上一篇文章介绍了Windows的SQLite数据库安装&#xff0c;但是安装完成后&#xff0c;需要用SQLite命令去管理SQLite数据库&#xff0c;对于初学者不太友好。本文为大家介绍SQLite数据库的可视化工具【SQLiteStudio】&#xff0c;用户可以在SQLiteStudio中&#xff0c;实现对数据…

SQLite下载、安装与连接

1.下载SQLite SQLite官网&#xff1a;https://www.sqlite.org/download.html 根据自己电脑操作系统配置&#xff0c;选择32位或64位下载&#xff08;一般情况下是64位&#xff09;。总共两个压缩包。 或者直接去&#xff1a;https://download.csdn.net/download/WenHuiJun_/8…

SQLite 使用(针对Android)

文章目录 1. SQLite 介绍2. SQLite可视化工具 安装3. SQLite的增删改查3.1 SqliteOpenHelper 创建 库或表3.2 SqliteOpenHelper 实现 增删改查 1. SQLite 介绍 SQLite的注意事项&#xff1a; 标准的主键写法&#xff1a;_id。(不标准写法&#xff1a;id)&#xff0c;此外&…

AXI 总线入门(一)通道握手-AXI-Lite

AXI 总线(一)通道握手-AXI-Lite 文章目录 AXI 总线(一)通道握手-AXI-Lite关于本系列教程什么是AXI协议AXI读写通道AXI读过程AXI写过程单一通道的握手VALID 信号先到READY信号先到READY和VALID同时到达原则性问题 AXI-Lite总线实现解析生成一个AXI(-Lite)外设整体端口信号解析A(…

【AXI】解读AXI协议乱序机制

芯片设计验证社区芯片爱好者聚集地硬件相关讨论社区数字verifier星球四社区联合力荐&#xff01;近500篇数字IC精品文章收录&#xff01;【数字IC精品文章收录】学习路线基础知识总线脚本语言芯片求职EDA工具低功耗设计VerilogSTA设计验证FPGA架构AMBA书籍 解读AXI协议乱序机制…

AXI协议(数据传输结构)

AXI协议关于Data read and write structure的部分指出&#xff0c;在数据传输过程中&#xff0c;主要涉及三个问题&#xff1a; 窄位宽数据传输&#xff08;Narrow transfers&#xff09;地址非对齐传输&#xff08;Unaligned Transfer&#xff09;混合大小端传输&#xff08;…

AXI总线代码详细整理(一)

目录 说明1. AXI 的时钟与复位1.1 时钟1.2 复位 2. 五个通道2.1 Write Address Channel2.2 Write Data Channel2.3 Write Response (B) Channel2.4 Read Address Channel2.5 Read Data (and Response) Channel 3 突发传输机制3.1 突发传输长度和宽度3.2 突发传输类型 说明 文字…

AXI总线详解完结篇

经过几个月的整理和发文,AXI总线详解系列正式迎来最终篇,内容基本涵盖了上一篇文章的全部内容。 所有文章的链接如下: 1、 AXI总线详解 2、AXI总线详解-总线和接口以及协议 3、AXI协议中的通道结构 4、AXI总线详解-AXI4读

AXI接口简介

此部分&#xff0c;有参考他人帖子的内容&#xff0c;加上自己的理解&#xff0c;感恩原作者 1、 AXI&#xff08;Advanced eXtensible Interface&#xff09;协议主要描述了主设备&#xff08;Master&#xff09;和从设备&#xff08;Slave&#xff09;之间的数据传输方式&…

AXI接口协议详解-AXI总线、接口、协议

转自&#xff1a;https://cloud.tencent.com/developer/article/1695010 AXI接口协议详解-AXI总线、接口、协议 AXI 总线 上面介绍了AMBA总线中的两种&#xff0c;下面看下我们的主角—AXI&#xff0c;在ZYNQ中有支持三种AXI总线&#xff0c;拥有三种AXI接口&#xff0c;当然用…

【AXI】解读AXI协议的低功耗设计

芯片设计验证社区芯片爱好者聚集地硬件相关讨论社区数字verifier星球四社区联合力荐&#xff01;近500篇数字IC精品文章收录&#xff01;【数字IC精品文章收录】学习路线基础知识总线脚本语言芯片求职EDA工具低功耗设计VerilogSTA设计验证FPGA架构AMBA书籍 解读AXI协议的低功耗…

AXI总线协议

0.绪论 AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0。 AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。 AXI4.0-lite是AXI的简化…

AXI总线学习------从零开始详细学-----------连载(2)axi protocol 通道分类

AXI总线学习连载&#xff08;2&#xff09; 鲁迅曾经说过&#xff1a; 学硬件&#xff0c;不是学哪里查哪里&#xff0c;有一些东西是必须系统的学的&#xff0c;不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的。 我也曾经说过&#xff1a; 英文手册非常重要&#xff0c…