SQLiteDatabase资源释放

释放Sqlite文件占用的多余空间 当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。sqlite这种处理方式自有它的道理之处,但有些场景,我们还是希望删除了数据之后,被删除数据所占用的空间也得以释放。用navicat连接上sqlite文件,删除数据之后,在界面执行“VACUUM”语句。然后,就可以看到删除数据之后,被删除的数据空间被回收。 阅读详情

SQLiteDatabse是android SDK提供的一个sqlite管理类,用于创建,删除,执行sql命令等任务。每一个sqlite数据库对应着一个SQLiteDatabase帮助类。SQLiteDatabase提供了一系列的静态工厂方法用于创建一个SQLiteDatabase实例,这个实例持有着管理sqlite数据库的必要资源,这些资源的释放需要用户手动的调用close函数。SQLiteDatabase的资源释放是通过引用计数来实现的。产生一个新的SQLiteDatabase的时候,引用计数为1.每当有其他的对象使用SQLiteDatabase来操作sqlite的时候,引用计数加1,操作完毕之后,引用计数减1.当用户主动调用SQLiteDatabase的close函数的时候,先将引用计数减1,然后检查计数是否为0,如果为0,那么就需要释放SQLiteDatabase所持有的资源。


SQLiteDatabase类图结构如下:


AutoCloaseable是一个接口,含有成员void close()。抽象类SQLiteCloseable管理着引用计数,函数acquireReference将引用计数加1,releaseReference将引用计数减1.当引用计数减为0的时候,会调用onAllReferencesReleased()函数,这个函数中用来处理SQLiteDatabase所持有的资源。


这个简易的框架提供了处理数据库资源的一种方式,主动提供close函数,而不依赖finalize函数做数据库资源释放的动作。同时,巧妙的利用引用计数来管理资源的释放,这为多线程使用同一SQLiteDatabase实例能够正确的处理资源释放提供了保证。不会导致一个线程在使用SQLiteDatabase的时候,另一个线程调用close导致数据库被关闭的错误。因为close函数也只是将引用计数减1.只有当引用计数为0的时候才会做真正的资源释放动作。



MQTT(轻量级消息中间件)基本使用指南 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布 / 订阅模式(Pub/Sub)消息传输协议,专为低带宽、不稳定网络环境设计,广泛应用于物联网(IoT)、移动设备、传感器网络等场景(如空气净化器、智能家居设备的远程控制)。Eclipse Mosquitto 是一款轻量级、开源的 MQTT 消息服务器(Broker),由 Eclipse 基金会维护,专为低资源消耗和易用性设计。 阅读详情

相关推荐

微信小程序地图开发避坑指南:腾讯地图API从配置到实战(附完整代码)

本文详细解析微信小程序中腾讯地图API的开发实践,从基础配置到高级功能实现,涵盖地图显示、地点搜索、路线规划等核心功能,并提供完整代码示例和常见问题解决方案,帮助开发者高效避坑。特别针对JavaScript SDK和map组件的使用进行了深度优化指导。

weixin_33725722的博客 486

QT笔记:数据库总结(一)

#include QT += sql QSqlDatabase类实现了数据库连接的操作 QSqlQuery类执行SQL语句 QSqlRecord类封装数据库所有记录 QSqlDatabase类 QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");  db.setHostName("localhost");    //数据库主

vloong的专栏 897

IMU标定中的Allen方差

Allen方差 Allen方差是IMU标定任务中的常用工具。IMU标定可以分为确定性误差和随机误差,确定性误差包括:scale、bias、misalignment。随机误差则主要是高斯白噪声和bias随机游走。Allen方差主要用于标定随机误差。 Allen方差获取 Allen方差的计算方法如下: 保持IMU静止, 采集N个数据点。 将N个点定长分组,常用的交叠式Allen方差如下(n=3): 对于每个子集,计算均值后,计算相邻两组的方差,得到的时间-方差曲线即为Allen方差。 Alle

realjc的博客 5734

JDBC

JDBC 概念: Java Database Connectivity Java 数据库连接,Java语言操作数据库 JDBC本质: 其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ro9Qpk8R-1616723050254)(C:\Users\高思语\AppData\R

gaisiyu的博客 302

汇川H5U搭配步进伺服电机使用CANopen通讯控制电机案例

摘要:本文介绍了基于汇川H5U PLC和STM4260B-CANopen-M步进伺服电机的控制系统搭建流程。主要内容包括:硬件准备(PLC、伺服电机、24V电源)、电机参数默认设置(地址1号、1M波特率)、使用AutoShop软件编写程序(配置CANopen参数、导入电机描述文件、设置PDO参数)以及功能块编程(使能控制、速度控制、绝对位置控制等)。通过查阅通讯手册完成各功能块参数配置,最终在主程序中调用功能块实现控制系统开发。该方案适用于需要精确运动控制的工业自动化场景。

m0_46512607的博客 1596

(侧边抽屉)移动端APP汉堡页设计全解:从规范落地到体验优化

汉堡页是一种隐藏式侧边导航组件,由汉堡图标(三条水平横线)、侧边抽屉面板、主界面遮罩层三部分构成。点击汉堡图标后,面板通常从左侧滑入,覆盖主界面部分区域(或悬浮于主界面之上);关闭时可通过点击关闭按钮、遮罩层、返回键或侧滑手势完成,是移动端特有的空间优化设计模式。

qq_67370502的博客 616

Qt SQL:QSqlDatabase

Qt SQL:QSqlDatabase

友善啊,朋友的博客 8288

用limma包进行多组差异表达分析

写在前面:最近在使用limma包进行差异表达分析,参考了网上许多教程都觉得说的云里雾里,很不清楚。经过我自己一段时间非常痛苦的钻研,弄明白了,解决了我的实际需求。于是决定将我的分析经验写下来,分享给需要的人。 首先加载前期预处理好的表达矩阵。(我的原始表达矩阵文件已附在文后,大家有需要可以下载实践) setwd("E://Rworkplace") data<-read.table...

weixin_40640700的博客 4万+

释放Sqlite数据库占用的多余空间

当删除sqlite数据库中的数据之后,会发现内容确实删除掉了,但是sqlite数据库占用的磁盘大小没有缩小,那是因为,删除数据后,未使用的磁盘空间被添加到一个内在的“空闲列表”中用于储存你下次插入的数据,磁盘空间并没有丢失,但是也不向操作系统返回磁盘空间,1、利用navicat删除数据之后,执行VACUUM语句即可。2、在自己的代码中执行。

世间所有的相遇都是久别重逢 1925

CHI里的Error handling机制

本文讲解了CHI里的Error handling机制。

W1Z1Q的专栏 2500

TMS320F28335调试跟踪的问题:DSP从上电复位,一直到执行main()的第一条语句之间,都干了些什么,以及CCS调试时程序查找的问题

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1213

增删改查 模板java_数据库增删改查模板 - hlxxjava的个人空间 - OSCHINA - 中文开源技术交流社区...

import java.util.ArrayList;import java.util.List;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import...

weixin_29860267的博客 154

ABAP Open SQL 数据拷贝导致 SAPSQL_DATA_LOSS:从报错机理到稳妥修复

数据类型与长度不合规。一旦在Open SQL的无损赋值检查里被发现,系统宁可中止也不会偷偷替你截断。把变量声明对齐到字典、在需要时明确表达转换/截断意图、写法上避免落入高危的操作数位置,再配合ATC的预防性检查,既能解决你这次的ST22Dump,也能把同类问题消灭在萌芽状态。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 429

使用SQLiteDatabase进行数据库操作的步骤

1、获取SQLiteDatabase对象,它代表了与数据库的连接。 2、调用SQLiteDatabase的方法来执行SQL语句。 3、操作SQL语句的执行结果,比如用SimpleCursorAdapter封装Cursor。 4、关闭SQLiteDatabase,回收资源。

ahao214——Dreamspace 831

假人有限元模型

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

(Android 9.0)关于Cursor的内存泄露问题总结

前言 Android中数据的持久化经常会使用到SqliteDatabase或是ContentProvider,查询数据的时候可以通过SqliteDatabase.query或是ContentResolver.query方法来获取一个Cursor对象,这个Cursor对象里面就包含了我们所要查找的数据。在之前的认知里Cursor在使用完毕后必须要主动调用close来关闭释放资源。最近发现项目里有很...

Peter的专栏 2001

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android SQLite存储

Android SQLite是一种轻量级嵌入式关系数据库,深度集成于Android系统,适用于移动设备本地数据存储。其核心特点包括无服务端架构、高效轻量、标准SQL支持及安全隔离。开发中主要通过SQLiteOpenHelper(管理数据库创建和版本更新)、SQLiteDatabase(执行CRUD操作)和Cursor(遍历查询结果)三个核心类进行操作。文章详细介绍了数据库创建、表结构设计以及增删改查等基本操作,并强调了事务处理的重要性。同时提供了实际使用示例,包含数据库路径管理、SQL执行和JSON数据转换

weixin_39173725的博客 399

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 9 冻结服务 fc,关于Cursor的内存泄露问题总结(Android 9.0)

前言Android中数据的持久化经常会使用到SqliteDatabase或是ContentProvider,查询数据的时候可以通过SqliteDatabase.query或是ContentResolver.query方法来获取一个Cursor对象,这个Cursor对象里面就包含了我们所要查找的数据。在之前的认知里Cursor在使用完毕后必须要主动调用close来关闭释放资源。最近发现项目里有很多地...

weixin_39573981的博客 242

Android中SQLite应用详解

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

u011574305的专栏 581

Java安卓开发之SQLiteDatabase中(通俗易懂版)——第7章

继上一篇我们将初始化工作做好之后,正式开始对于数据库增删改查一系列的函数定义在开始之前,我们下文会提到一个类:ContentValues,这个是类似于HashMap的一个东西,键对应一个值,添加和查询都需要ContentValues。

安卓开发热爱者 1467

Android SQLiteDatabase分析

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.youkuaiyun.com/Sailingthink/article/details/27691953 ...

weixin_30784141的博客 149

SQLiteDatabase使用问题总结

SQLiteDatabase使用过程中经常碰到的问题 1.DatabaseHelper在onCreate或者是onUpdate的时候调用DatabaseHelper.getWriteDatabase获取SQLiteDatabase 会导致一个递归死循环 解决方案: 如果在onCreate或者是onUpdate的时候需要获取一个SQLiteDatabase进行数据的读取与写入,应该在onC...

桔子 1652

android SQLiteDatabase

一、SQLite: (一)、简介:         除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。 在Android平台上,集成了一个嵌入式关系型数据库——SQLite。          SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)等五种数据类型; 虽然它支持的类...

bobo的博客 647

android SQLiteDatabase源码解析

源于包android.database.sqlite.SQLiteDatabase 首先看一下继承和实现了那些基类和接口 SQLiteDatabase extends SQLiteClosable implements Closeable Closeable extends AutoCloseable interface AutoCloseable //java. langv

光英的记忆博客 807

SQLiteDatabase介绍和一点点的使用

一、SQLite: (一)、简介:         除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。 在Android平台上,集成了一个嵌入式关系型数据库——SQLite。          SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)等五种数据类型; 虽

FrancisBingo的博客 2211

SQLiteDatabase

SQLiteDatabase 一、SQLite: (一)、简介:         除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。 在Android平台上,集成了一个嵌入式关系型数据库——SQLite。          SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEX

ElevenDGQ的博客 4898

SQLiteDatabase的tips

1.处理完数据后,一定要关闭资源,先创建的后关闭,后创建的先关闭。 可以创建一个工具类,添加一个释放资源的方法。 try { Connection con=... Statement state=... ResultSet res=... }catch(Exception e){ e.printStackTrace();}finally{ try{ res.close();

万豪给给的博客 229
上一篇: 进程内存布局
下一篇: Android Binder 框架
Sailingthink
博客等级 码龄14年 31粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值