Android SQlite数据库使用详解

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

目录

  • 概述
  • SQLite使用
    • SQLite数据库创建
    • 增加数据
    • 删除数据
    • 更新数据
    • 查询数据
  • 完整代码

概述

SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。

查看模拟器数据库传送门: Android Studio查看SQLite数据库方法大全

SQLite使用

SQLite数据库创建

Android提供了一个SQLiteOpenHelper帮助类,用于对数据库进行创建和升级
SQLiteOpenHelper是一个抽象类,使用时需要创建自己的类去继承它。
SQLiteOpenHelper有两个抽象方法onCreate()onUpgrade(),必须在自己的类中重写这两个方法,然后分别在这两个方法中实现创建升级数据库的逻辑。

public class DBOpenHelper extends SQLiteOpenHelper {public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {//创建数据库sql语句并执行String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer)";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

增加数据

public long insert(String table, String nullColumnHack, ContentValues values) ;

方法参数:

table表名
nullColumnHack可选参数,当values参数为空时,指定哪个字段设置为null,如果values不为空,则该参数值可以为空
values指定具体的字段,相当于map集合,键值对的形式存储
返回值返回插入成功的行数,如果为-1表示失败

实例:
SQLiteOpenHelper中还有两个非常重要的实例方法: getReadableDatabase()getWritableDatabase()
这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。
不同的是,当数据库不可写入的时候(如磁盘空间已满),
getReadableDatabase()方法返回的对象将以只读的方式去打开数据库
getWritableDatabase()方法则将出现异常

 DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1);SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();
//创建存放数据的ContentValues对象
ContentValues values = new ContentValues();
values.put("username","test");
values.put("password","123456");
values.put("age",20);
//数据库执行插入命令
db.insert("user", null, values);

添加之前一共7条数据
在这里插入图片描述
在这里插入图片描述
点击添加按钮刷新后多了一条数据
在这里插入图片描述

删除数据

public int delete(String table, String whereClause, String[] whereArgs) 
table表名
whereClause查询条件
whereArgs指定条件语句,可以使用占位符?
whereArgs当表达式中含有占位符,改参数用户指定各占位符参数的值
返回值删除成功的行数

使用方法:

 DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1);SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();
db.delete("user", "username=?", new String[]{"test"});

我们可以看到删除数据之前表里一共有9条数据
在这里插入图片描述
点击删除刷新后一共只剩6条数据了,成功删除3条数据
在这里插入图片描述

更新数据

public int update(String table, ContentValues values, String whereClause, String[] whereArgs) 

方法参数:

table表名
values指定要更新的字段及对应的字段值
whereClause指定条件语句,可以使用占位符?
whereArgs当表达式中含有占位符,改参数用户指定各占位符参数的值
返回值返回影响的数据条数

使用示例:

 DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1);SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();
ContentValues values2 = new ContentValues();
values2.put("username", "admin123");
db.update("user", values2, "username=?", new String[]{"admin"});

在这里插入图片描述
点击修改按钮后再刷新数据
在这里插入图片描述
在这里插入图片描述

查询数据

 public Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having, String orderBy) 

参数详解:

table表名
columns指定要查询的列,如果为空,返回所有
selection查询条件 ,可以用占位符?
selectionArgswhere对应的条件值
groupBy指定分组方式
having指定having条件
orderBy排序方式

使用示例:

 DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1);SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();//创建游标对象
Cursor cursor = db.query("user", new String[]{"id","username","age"}, "username=?",new String[]{"admin123"}, null, null, null);
//利用游标遍历所有数据对象
while(cursor.moveToNext()){String id = cursor.getString(cursor.getColumnIndex("id"));String username = cursor.getString(cursor.getColumnIndex("username"));int age = cursor.getInt(cursor.getColumnIndex("age"));Log.i("Mainactivity","result: id="  + id +" username: " + username +"  age:" + age);
}
// 关闭游标,释放资源
cursor.close();

我们可以看到数据库表中的数据都被打印出来了在这里插入图片描述

完整代码

MainActivity.java

package com.hnu.sqlite;import androidx.appcompat.app.AppCompatActivity;import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;import java.io.File;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1);final SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();Button button1 = findViewById(R.id.button2); //addbutton1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建存放数据的ContentValues对象ContentValues values = new ContentValues();values.put("username","test");values.put("password","123456");values.put("age",21);//数据库执行插入命令db.insert("user", null, values);}});Button button2 = findViewById(R.id.button3); //删button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {db.delete("user", "username=?", new String[]{"test"});}});Button button3= findViewById(R.id.button4); //改button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ContentValues values2 = new ContentValues();values2.put("username", "admin123");db.update("user", values2, "username=?", new String[]{"admin"});}});Button button4 = findViewById(R.id.button5); //查button4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建游标对象Cursor cursor = db.query("user", new String[]{"id","username","age"}, "username=?or age =?", new String[]{"test","20"}, null, null, null);//利用游标遍历所有数据对象while(cursor.moveToNext()){String id = cursor.getString(cursor.getColumnIndex("id"));String username = cursor.getString(cursor.getColumnIndex("username"));int age = cursor.getInt(cursor.getColumnIndex("age"));Log.i("Mainactivity","result: id="  + id +" username: " + username +"  age:" + age);}// 关闭游标,释放资源cursor.close();}});}
}

DBOpenHelper .java

package com.hnu.sqlite;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import androidx.annotation.Nullable;public class DBOpenHelper extends SQLiteOpenHelper {public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {//创建数据库sql语句并执行String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer)";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="52dp"android:text="增加数据"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/button4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:text="修改数据"app:layout_constraintEnd_toEndOf="@+id/button2"app:layout_constraintStart_toStartOf="@+id/button2"app:layout_constraintTop_toBottomOf="@+id/button2" /><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:text="删除数据"app:layout_constraintEnd_toEndOf="@+id/button4"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="@+id/button4"app:layout_constraintTop_toBottomOf="@+id/button4" /><Buttonandroid:id="@+id/button5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:text="查询数据"app:layout_constraintEnd_toEndOf="@+id/button3"app:layout_constraintStart_toStartOf="@+id/button3"app:layout_constraintTop_toBottomOf="@+id/button3" /></androidx.constraintlayout.widget.ConstraintLayout>

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

相关文章

SQLite数据库

目录 SQLite数据库 在Android中的使用 SQLiteOpenHelper中的方法 增删改查 添加数据 insert() 查询数据 query(),rawQuery() 查询和添加案例 数据库帮助类&#xff1a; MainActivity&#xff1a; Activity_main.xml: SQLite数据库 SQLite是一个轻量级的嵌入数据库&…

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的简化…