SQLite的基本使用介绍【教程5--图解】

VSCode插件助力SQLite数据库可视化操作 本文介绍了如何利用VSCode插件实现SQLite数据库的可视化操作,提升开发效率。通过安装SQLite插件,开发者可以在熟悉的代码编辑环境中直接浏览、编辑数据库表,并运行SQL查询,无需切换工具。文章详细演示了从环境配置、数据浏览到增删改查的全流程,是轻量级数据库管理的理想解决方案。 阅读详情

作者:盖伟麟


SQLite说明:轻量型的基于文本的关系型数据库,提供了比较完整的数据库功能,用于比较多的嵌入式设备,主要是因为数据库比较小,但功能比较完善。

 

l  SQLiteOpenHelper类的使用:

getReadableDatabase():得到一个可读(查)的数据库,返回SQLiteDatabase;

getWritableDatabase():得到一个可写(增、删、改)的数据库,返回同上;

onCreate(SQLiteDatabase db):创建数据库;

onOpen(SQLiteDatabase db): 打开数据库;

onUpdata(SQLiteDatabase db, int oldVersion, int newVersion):更新数据库

close():关闭数据库


l  具体实例:

首先看程序运行后截图,从截图中看以看出我们在main.xml中设置了五个Button控件



实例程序共有两个类DatabaseHelper.java 与 SQLiteActivity.java。

DatabaseHelper.java

 

DatabaseHelper类要继承SQLiteDatabaseHelper类,代码中有注释可以帮助理解程序:


public class DatabaseHelper extends SQLiteOpenHelper {
	private static final int VERSION = 1;
	//在SQLiteOepnHelper的子类当中,继承了父类,必须重写该构造函数,这是java基础知识
	public DatabaseHelper(Context context, String name, CursorFactory factory,
			int version) {
		//必须通过super调用父类当中的构造函数
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}//调用三个参数的构造函数
	public DatabaseHelper(Context context,String name){
		this(context,name,VERSION);
	}//调用四个参数的构造函数
	public DatabaseHelper(Context context,String name,int version){
		this(context, name,null,version);
	}
//该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		System.out.println("create a Database");
		//execSQL函数用于执行SQL语句
		db.execSQL("create table user(id int,name varchar(20))");
	}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		System.out.println("update a Database");
	}
}


注意:数据库版本要是正数且递增;

        DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,

第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作

提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作,例如创建,修改数据库的表结构

 

 

SQLiteActivity.java

使用此Activity通过上面的类对关系型数据库SQLite进行访问,主要是五个按钮的监听器设置及跟按钮绑定。

      

       首先介绍adb命令的使用,注意前提是环境配置正确。

      

       大家知道Android是基于linux,所以输入adb shell进入LINUX命令行:



我们的数据库数据存在哪里呢?




可以看到ls –l后,有一个data目录。

       进入data目录,ls –l后,可以看到还有一个data目录,进入。

      

进入后发现有很多目录其对应着每个应用程序,标记处是我们的模拟器上运 行的应用程序。




进入我们的程序包,会发现其中只有一个lib目录如下。




下面我们开始运行程序:


点击第一个按钮  




打印出create a Database,这里调用了public voidonCreate(SQLiteDatabase db)。

其中主要调用了下面的监听器,新建dbHelper对象时候,传递了两个参数分别是这个Activity和所创建数据库的名字。


class CreateListener implements OnClickListener{
		public void onClick(View v) {
			//创建一个DatabaseHelper对象
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
			SQLiteDatabase db = dbHelper.getReadableDatabase();
		}
}


       进入应用程序的目录,可以看到我们建立的数据库。




如何进入数据库对该数据库进行操作呢?用命令sqlite3 数据库名,如下图所示命令行提示符也发生变化。




我们进行一个最常规的操作.schema显示当前数据库有哪些表以及创建这些表的建表语句。




注意SQLite中的命令全是以“.”开头。下面查询此表,会发现现在表中还没有数据。




下面点击按钮 打开LogCat如下图




打印出update a Database,因为数据库变更了所以调用了public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion)函数。

其中主要调用了下面的监听器,调用了三个参数的构造函数,改了数据库的版本号。

classUpdateListener implements OnClickListener{
              public void onClick(Viewv) {
DatabaseHelper dbHelper = newDatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
                     SQLiteDatabase db =dbHelper.getReadableDatabase();
              }
 }


下面看按键   

绑定的监听器的设置看下面代码,下面的ContentValues对象会在数据库的修改操作中经常用到。


class InsertListener implements OnClickListener{
		public void onClick(View v) {
			//生成ContentValues对象
			ContentValues values = new ContentValues();
			//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
			values.put("id", 1);
			values.put("name","zhangsan");
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
			SQLiteDatabase db = dbHelper.getWritableDatabase();
			//调用insert方法,就可以将数据插入到数据库当中
			db.insert("user", null, values);
//三个参数,第一个表名,第一个对于相对的属性如果没有则为null,第三个为ContentValue对象
		}
}


我们点击上面按钮,重新查询表中的数据,发现新增加了一行数据。




下面点击按钮   

按钮绑定的监听器设置看下面代码。


 class UpdateRecordListener implements OnClickListener{
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			//得到一个可写的SQLiteDatabase对象
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
			SQLiteDatabase db = dbHelper.getWritableDatabase();
			ContentValues values = new ContentValues();
			values.put("name", "zhangsanfeng");
			//第一个参数是要更新的表名
			//第二个参数是一个ContentValeus对象
			//第三个参数是where子句
			db.update("user", values, "id=?", new String[]{"1"});
		}
  }


 

注意:更新操作就相当于执行SQL语句当中的update语句

          UPDATE table_name SET XXCOL=XXXWHERE XXCOL=XX...

               其中的‘’?“是一个占位符,对应于后面一个字符。

点击上面的update按钮后重新查询数据库发现name字段已经改变。




下面看按键     其绑定的监听器设置如下,可以看出query()函数参数很多,其实就是参照SQL的查询语句来的。


 QueryListener implements OnClickListener {
		public void onClick(View v) {
			System.out.println("aaa------------------");
			Log.d("myDebug", "myFirstDebugMsg");
			DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
					"test_mars_db");
			SQLiteDatabase db = dbHelper.getReadableDatabase();
			Cursor cursor = db.query("user", new String[] { "id", "name" },
					"id=?", new String[] { "1" }, null, null, null);
			while (cursor.moveToNext()) {
			//下面要先得到列的序号,通过序号列的相应属性
				String name = cursor.getString(cursor.getColumnIndex("name"));
				System.out.println("query--->" + name);
			}
		 }
}



LogCat输出如下截图。 




本文针对一个实例介绍使用SQLite的基本使用方法。

不过还是不要过于依赖于SQLite的数据库,因为还是不太稳定,出现很多莫名其妙的问题难于解决,不要存放太多数据或过度依赖于它。






Android getReadableDatabase() 和 getWritableDatabase()分析对比 Android getReadableDatabase() 和 getWritableDatabase()分析对比 Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。(getReadableDatabase()方法中会调用getWritableDatabase()方法) 其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。 getR 立即下载

相关推荐

systrace分析 之 问题初步定位

如下surfaceflinger空缺点,上面对应的bufferTX 中有buffer,但VSYNC-SF 过来后,SurfaceFlinger却没有去取,检查测试app “android.settings”, 也没有GPU completion 时间长的问题,所以该部分可以请SurfaceFlinger的owner 进一步确认为何不取buffer。. GPU拿的是acquireFence HWC拿的是releaseFence, GPU是绘图,HWC是合成显示,这两个是互相等待的关系,

yangzex的专栏 3195

android流行数据库对比,Android getReadableDatabase() 和 getWritableDatabase()分析对比

Android getReadableDatabase() 和 getWritableDatabase()分析对比Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。(getReadableDatabase()方法中会调用getWritableDatabase()方法)其中get...

weixin_35015064的博客 909

TeraTerm 使用技巧

⏹TeraTerm 使用技巧

菜鸟记录 9998

Android的系统架构认识

作者:盖伟麟 此技术文档主要是从基础了解Android系统架构,便于对以后开发形成一些基本应用架构。 一.android系统架构图及各层介绍   1.     应用层:应用是用java语言编写的运行在虚拟机上的程序,比如Email客户端,SMS短消息程序,日历等。 2.     应用框架层:这一层是编写Google发布的核心应用时所使用的A

移动平台应用软件开发技术 6740

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

Ships Dataset:解锁海洋探索的数字宝库

在海上交通管理中,通过对船舶的持续跟踪,可以及时发现船舶的异常行为,如偏离航线、超速等,保障海上航行的安全。例如,通过分析船舶的航行数据和位置信息,合理安排船舶的停靠时间和装卸货物顺序,避免港口拥堵,提高船舶的周转率。同时,还精确标注了船舶在图像中的位置坐标,通过这些坐标,我们可以准确地定位船舶在图像中的具体位置,为后续的分析和处理提供了精确的依据。从繁忙运输货物的货船,到承载着能源使命的油轮,再到穿梭于海洋寻找鱼群的渔船 ,每一种船舶都有着独特的外形和功能,在数据集中留下了它们的身影。

qq_38220914的博客 1267

源码解析getWritableDatabase()和getReadableDatabase()的差异

我们获取数据库实例时使用了getWritableDatabase()方法,也许朋友们会有疑问,在getWritableDatabase()和getReadableDatabase()中,你为什么选择前者作为整个应用的数据库实例呢?在这里我想和大家着重分析一下这一点。 我们来看一下SQLiteOpenHelper中的getReadableDatabase()方法: 1 public

u014628886的博客 1093

幻尔串口总线舵机控制Python SDK

幻尔串口总线舵机控制Python SDK,可以直接在PC端,不需要借助单片机对舵机进行控制。

daishabby2486的博客 4085

Android数据库应用(《Android开发入门与实战》选摘)

Android数据库应用(《Android开发入门与实战》选摘) 收藏1.第一步<br />在Eclipse中,打开ex08_1_SQLite 项目,具体步骤如下。<br />·  新建一个项目。依次单击File→New→Android Project项。<br />·  在新建项目的对话框中,选择Create project from existing source项。<br />·  单击浏览,找到ex08_1_SQLite项目,然后单击确定。<br />程序的目录结构如图8-6所示。2.第

csu_yang的专栏 3416

YOLOv13保姆级教程+AKConv模块:可变形卷积+自适应核优化,mAP提升3.23%,召回率&mAP50~95显著提升(论文涨点模块已验证)

本文介绍了一种改进的YOLOv13-AKConv模型,通过引入AKConv模块显著提升了目标检测性能。实验结果表明,优化后的模型(绿色曲线)相比原模型(蓝色曲线)在mAP指标上提升了3.23个点,同时召回率、mAP50-95等指标均有明显提升。作者详细阐述了模型移植过程,包括创建yolov13-AKConv.yaml配置文件,修改tasks.py和modules/init.py文件,以及实现AKConv模块的核心代码。该模块采用可变形卷积思想,通过动态生成采样点位置来增强特征提取能力,并集成了BN和SiLU

FJN110的博客 2611

Newton & Nvidia 开源 GPU 加速机器人仿真器入门教程(一)

Newton 是一个 GPU 加速、可扩展和可微分的物理仿真引擎,专为机器人、研究和高级仿真工作流而设计。Newton 基于 NVIDIA Warp 并集成了 MuJoCo Warp,为用户和开发人员提供了高性能仿真、现代 Python API 和灵活的架构。

机器人控制与仿真应用 1482

图解SQLite教程

图解SQLite教程,上图,无废话;

bcbobo21cn的专栏 2115

Xilinx FPGA平台DDR3设计保姆式教程(1)DDR3基础简介

xilinx平台DDR3设计(1)DDR3简介 如果我们只是拿来用ddr搬砖,那么它就简单,知道IP怎么使用就好,但是要想知其所以然,理论知识是必备的,这也是我们初学者所欠缺的东西,慢慢修炼吧! 目录 一、DDR3简介 二、地址的概念及容量计算 三、重要给概念理解 3.2 列地址脉冲选通潜伏期 3.4 掩码 四、参考资料 一、DDR3简介 DDR3全称double-data-rate 3 synchronous dynamic RAM,即第三代双倍速率同步动态随机存储器。...

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

图解Sqlite教程2

图解Sqlite教程 http://blog.csdn.net/bcbobo21cn/article/details/43852553 http://pan.baidu.com/s/1skFeGVj 下文所创建的数据库下载 新建一个数据库; 查看数据库; 打错了,use是mysql的命令行; 创建表;查看表;

bcbobo21cn的专栏 566

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

零基础图解SQLite安装:从下载到第一个数据库

最近想学习数据库操作,发现SQLite非常适合新手入门——它轻量级、无需复杂配置,还能直接操作文件型数据库。下面分享我的安装过程记录,包含Windows和Mac双平台指引,连我这样的小白都能搞定!整个安装过程最花时间的是环境变量配置,其实也可以跳过——只要记住把sqlite3.exe放在项目文件夹里直接使用。的zip包(例如sqlite-tools-win32-x86-版本号.zip),这个版本包含命令行工具和基础组件。的在线SQLite环境,不用安装就能直接编写运行SQL语句,特别适合快速验证想法。

AgatePanther34的博客 728

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用SQLite数据库加密敏感信息嵌入程序(3)

SQLite 可移植到不同平台,在各操作系统上都能很好且高效一致的工作的主要原因是在底层与操作系统的交互上定义了一个虚拟文件系统,即 VFS(Virtual File System)。要实现一个标准的 VFS 可通过子类化三个对象来实现,三个对象分别是sqlite3_vfs(操作系统接口对象)、sqlite3_io_methods(操作系统接口文件虚拟方法对象)、sqlite3_file(操作系统文件对象)。

WackMan的专栏 546

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

用vs2008编译出sqlite dll和lib (图解)

1:从sqlite的官网上下载源码 http://www.sqlite.org/download.html2:打开vs2008工程新建一个空的dll工程。3:把sqlite3.h,sqlite3.cpp,sqlite3.def分别加入到head file 和source file下。4:编译程序。 这时只能得到sqlite3.dll文件。5:打开vs2008自带的命令行:

liyuwenjing的专栏 2954

5分钟搞定数据库迁移:从SQLite到MySQL的无缝转换工具

你是否曾遇到这样的困境:开发初期用SQLite搭建的项目原型,随着用户量增长需要迁移到MySQL,却被数据类型不兼容、语法差异和繁琐的手动转换折磨得焦头烂额?传统迁移方法往往需要编写大量转换脚本,处理无数个表结构和数据记录,耗时3小时以上还可能出现格式错误。今天要介绍的这款开源工具,就像为数据库迁移铺设了一条高速公路,让原本需要半天的工作缩短到一杯咖啡的时间。 ## 解决什么问题 想象一下,当

gitblog_01106的博客 1198

安卓app中把数据存在数据库中如何查看(Sqlite安装)

安卓app中把数据存在数据库中如何查看 可通过Sqlite查看(电脑中如未安装数据库,请按照下方步骤安装) 在data下方寻找你的应用包名 然后右键(导出的数据库文件) 导出即可(save as。。。) 把app中的db文件到处到电脑上,然后用sqlite软件打开即可 MySQL5.0版本的安装图解教程是给新手学习的,当前mysql5.0.96是最新的稳定版本。 (如未下载可点击下方链接去下...

wdx_1136346879的博客 7998

解决SVN“清理以下路径失败”报错(使用SQLite)

解决SVN“清理以下路径失败”问题(使用SQLite)

ranranZ97的博客 4624

第五章 SQLite数据库:5、SQLite 进阶用法:JOIN、UNION、TRIGGER、INDEX、ALIAS、INDEXED BY 等模块

采用“图书借阅系统”作为示例模型,涵盖 JOIN、UNION、TRIGGER、INDEX、ALIAS、INDEXED BY 等模块,旨在帮助读者全面理解 SQL 编程逻辑与底层原理,提升数据建模与查询优化能力。

qq_62848032的博客 989

使用SQLite数据库加密敏感信息并嵌入程序(1)

一、前言 SQLite是目前运行最广泛的数据库引擎,没有之一。在实际开发中往往将数据经过多重进加密后保存到数据库,再将数据库作为资源嵌入到程序中,在运行时解密获取敏感信息,本文将实现相关实现演示。

WackMan的专栏 561

小白也能懂:数据库基础知识图解指南

作为过来人,我整理了一个超简单的图书馆管理系统案例,配合InsCode(快马)平台的实时运行功能,带大家轻松入门数据库的世界。它的SQLite环境开箱即用,不需要安装任何软件,特别适合新手边学边练。刚开始可能会觉得外键、JOIN这些概念有点绕,建议多改改示例中的查询条件,观察结果变化。数据库其实就像乐高积木,掌握基本组件后,就能组合出各种强大的功能。借阅记录表:包含借阅ID(主键)、图书ID(外键)、读者ID(外键)、借阅日期。记录(Record):表的行,比如一本《三体》的所有信息。

AmberLeopard26的博客 257

实战案例:使用 Node.js + SQLite 构建高颜值 MBTI 性格测试系统

本文介绍了一个基于MBTI性格测试的全栈Web应用开发实践。项目采用轻量级技术栈(Node.js+Express+SQLite)实现动态题库、交互式答题、后端判分算法和结果展示功能。前端运用CSS3的玻璃拟态设计提升视觉体验,通过原生JS管理状态实现SPA交互。文章详细解析了数据库初始化、核心判分算法、前端动画效果等关键技术实现,并总结了全栈开发经验。该项目既可作为学习全栈开发的练手案例,也为优化用户体验提供了实用技巧,未来可扩展用户系统和社交分享功能。

Winfredzhang的博客 840

图解 在 .NET 8.0、.NET 9.0 的 Blazor Web App 项目模板中使用 Entity Framework Core(EF Core) 访问 SQLite 数据库:对象模式

在 .NET 8.0、.NET 9.0 的 Blazor Web App 项目模板中使用 Entity Framework Core(EF Core) 访问 SQLite 数据库:对象模式。

cqths的博客 755

SQL新手必学:INSERT INTO SELECT语句图解指南

今天就用最直观的方式,把这条语句的执行逻辑和常见坑点整理出来,希望能帮到同样在入门路上的朋友。最后提醒:遇到报错别慌,仔细看错误信息指向哪一行,大多数问题都是字段对应或语法细节导致的。这个语句的核心是从一个表查数据,然后插入到另一个表。想象你有两张表——左边是装满水果的篮子A,右边是空的篮子B。对于需要持续运行的数据库应用,还能一键部署成可长期访问的服务。可以直接体验完整的SQL学习环境,它内置了SQLite数据库和交互式编辑器,特别适合边学边练。尝试把5列的表数据插入到3列表时,系统会直接报错。

BlackironLynx23的博客 492
上一篇: android 常用的intent action整理
下一篇: Android的系统架构认识
pku_android
博客等级 码龄15年 450粉丝 151原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值