`
hemowolf
  • 浏览: 154109 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

游标泄漏(CursorLeak)

阅读更多

  通常,使用try-finally来确保程序异常时能正常关闭游标。

 

Cursor cursor = null;
try {
	cursor = getContentResolver().query(URI, .....);
        //dosomething
} finally {
	if (cursor != null) {
		cursor.close();
	}
}

 典型的一种写法,但并不能确保游标不泄漏。下面是采用这种写法产生的一出异常:

 ERROR/CursorLeakDetecter(11085):

android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 

at android.content.ContentResolver.query(ContentResolver.java:323)

  如果您稍不留意不会怀疑这块代码的问题,因为try-finally写法不存在逻辑上的问题。
  由于这里未考虑到多线程场景,try-finally并不能保证query打开游标在dosomething时,被其他线程再次调用query打开游标。所以当遇到存在多线程的调用时必须对游标打开到关闭时间段添加锁,即这里是对try-finally块加锁。
 

分享到:
评论

相关推荐

    波形图游标功能_获取游标_

    波形图游标功能在许多科学计算和数据分析应用中都是一种非常重要的工具,它允许用户在可视化图形上精确地定位和测量数据点。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这样的图形化编程环境...

    oracle 隐式游标,显示游标,游标循环

    ### Oracle中的游标详解 #### 一、引言 在Oracle数据库中,游标是一种非常重要的机制,它允许用户在程序中对查询结果进行逐行处理。游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行...

    LabVIEW 的游标图例

    游标图例用来显示图形中的游标,如图1所示。在图形上用游标可读取绘图区域上某个点的确切值,游标值会显示在游标图例中。  图1 图形缩放方式  图2 游标图例  选择游标图例右键快捷菜单的“创建游标”,在...

    Mysql游标(循环操作)

    ### MySQL游标(循环操作) #### 一、游标简介 在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过...

    使用游标更新数据库

    使用游标更新数据库 使用游标更新数据库是指在游标定位下,修改或删除表中指定的数据行。使用游标对数据进行更新可以提高数据库的性能和效率。 1. 游标更新的基本概念 游标是数据库中的一种数据结构,它可以用来...

    游标和异常处理 游标和异常处理

    游标和异常处理 游标是 SQL 的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将...

    SQL游标使用金典

    6. **关闭与释放游标**:使用`CLOSE`和`DEALLOCATE`关键字分别关闭和释放游标,这是非常重要的步骤,有助于避免资源泄漏。 #### 五、总结 通过以上示例,我们可以看到游标是一种非常强大的工具,能够帮助我们按需...

    oracle游标的总结oracle游标的总结

    Oracle 游标概述 Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、...

    labview中波形图的游标坐标

    游标是LabVIEW波形图的一个重要功能,它可以帮助用户精确地读取图形上的数据点坐标,进而进行数据分析或调试工作。本篇将详细解释如何在LabVIEW中操作波形图的游标以及实时显示坐标值。 1. **波形图的创建与数据...

    游标卡尺SolidWorks图纸

    游标卡尺是一种精密的测量工具,常用于工程和制造业中进行尺寸的精确测量。在三维建模领域,使用SolidWorks这样的专业软件可以创建出游标卡尺的虚拟模型,以便于设计、模拟和分析其结构与功能。SolidWorks 2016是一...

    oracle数据库的游标

    游标是Oracle数据库中一个重要的概念,它是一种在内存中用于存储SQL查询结果的临时工作区域。使用游标可以方便地访问查询结果集中的每一行,这对于处理大量数据是非常有用的。游标主要分为两种类型:显式游标和隐式...

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    获取多个游标的坐标8.2_labview获取游标_

    "获取多个游标的坐标8.2_labview获取游标_"这个主题主要关注如何在LabVIEW中有效地利用游标功能,特别是如何获取并操作多个游标在波形图上的位置信息。以下是对这一主题的详细阐述: 首先,我们需要理解LabVIEW中的...

    游标卡尺的使用.ppt

    游标卡尺的使用 游标卡尺是一种常用的测量工具,广泛应用于机械制造、工程设计、建筑施工等领域。下面我们将详细介绍游标卡尺的构造、使用规则、分类、测量原理和读数方法。 一、游标卡尺的构造 游标卡尺由四个...

    SQL Server 游标用法

    7. **释放(DEALLOCATE)**:最后,使用`DEALLOCATE`释放游标资源,防止内存泄漏: ```sql DEALLOCATE my_cursor1 ``` 游标类型包括: - **静态游标**:在打开时就创建了一个数据副本,不会反映数据源的任何后续...

    关于游标的说明与使用方法

    ### 关于游标的说明与使用方法 #### 一、什么是游标? 在数据库技术中,**游标**是一种用于检索查询结果集中的数据的方式。它允许用户逐行处理记录集,而不是一次处理整个记录集。这使得游标成为处理大量数据时的...

    游标最简单教程

    ### 游标最简单教程知识点解析 #### 一、游标基本概念 游标是数据库管理系统中的一个重要概念,主要用于处理查询结果集中的数据记录。它允许用户逐行地读取和处理这些记录,这对于需要对每一行数据进行特定操作的...

    Oracle存储过程游标详解

    "Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...

    SqlServer存储过程、游标讲解

    在游标的使用过程中,需要注意资源管理,确保在操作完成后关闭并释放游标,以避免造成资源泄露。 值得注意的是,虽然游标非常强大,但过多地使用游标会对性能产生负面影响,因为它涉及到逐行处理数据,相比集合操作...

Global site tag (gtag.js) - Google Analytics