`
debuglog
  • 浏览: 196324 次
社区版块
存档分类
最新评论

SQLite抛出错误“未关闭游标及数据库对象”特殊原因一例

阅读更多
Android 2.3.3
Eclipse Version: 3.7.0
LogCat

 LogCat 报错信息:

02-13 13:29:32.830: WARN/ActivityManager(62): Launch timeout has expired, giving up wake lock!  
02-13 13:29:33.381: DEBUG/dalvikvm(17173): GC_CONCURRENT freed 771K, 57% free 2908K/6727K, external 2013K/2137K, paused 7ms+5ms  
02-13 13:29:33.630: DEBUG/dalvikvm(17173): GC_FOR_MALLOC freed 867K, 58% free 2836K/6727K, external 2013K/2137K, paused 178ms  
02-13 13:29:33.859: ERROR/Database(17173): close() was never explicitly called on database '/data/data/com.tmall.nokia/databases/taobaoNokia.db' 
02-13 13:29:33.859: ERROR/Database(17173): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
02-13 13:29:33.859: ERROR/Database(17173): at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1847)
02-13 13:29:33.859: ERROR/Database(17173): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
02-13 13:29:33.859: ERROR/Database(17173): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
02-13 13:29:33.859: ERROR/Database(17173): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
02-13 13:29:33.859: ERROR/Database(17173): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
02-13 13:29:33.859: ERROR/Database(17173): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-13 13:29:33.859: ERROR/Database(17173): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
02-13 13:29:33.859: ERROR/Database(17173): at com.tmall.nokia.db.RecordDBHelper.query(RecordDBHelper.java:49)
02-13 13:29:33.859: ERROR/Database(17173): at com.tmall.nokia.manage.RecordDBopt.get(RecordDBopt.java:78)
02-13 13:29:33.859: ERROR/Database(17173): at com.tmall.nokia.manage.RecordMessage.sendMseeage(RecordMessage.java:111)
02-13 13:29:33.859: ERROR/Database(17173): at com.tmall.nokia.manage.RecordMessage.sendMseeage(RecordMessage.java:87)
02-13 13:29:33.859: ERROR/Database(17173): at com.tmall.nokia.Report.run(Report.java:49)
02-13 13:29:33.859: ERROR/Database(17173): at java.lang.Thread.run(Thread.java:1019)
02-13 13:29:33.830: WARN/ActivityManager(62): Launch timeout has expired, giving up wake lock!
02-13 13:29:34.381: DEBUG/dalvikvm(17173): GC_CONCURRENT freed 771K, 57% free 2908K/6727K, external 2013K/2137K, paused 7ms+5ms
02-13 13:29:34.630: DEBUG/dalvikvm(17173): GC_FOR_MALLOC freed 867K, 58% free 2836K/6727K, external 2013K/2137K, paused 178ms

 

发生错误原因分析:

主要错误:

02-13 13:29:33.859: ERROR/Database(17173): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here

 

出错处代码

		SQLiteDatabase db = getWritableDatabase();

 

意思是指在此处打开数据库操作之前,应用程序没有关闭游标或数据库对象。

在应用中,对数据库操作完成后,应该对游标及数据库进行关闭操作

		if (!cur.isClosed()) {
			cur.close();
		}
		db.close(); 

 

检查操作数据库的相关源代码,确认在退出前关闭了游标及数据库对象。
那还抛出未关闭的错误是怎么回事呢?继续检查发现,抛出此错误之前,在操作数据库过程中还抛出了另外的一个错误。

原来在抛出第一个错误以后,关闭操作未执行,导致再次操作数据库时抛出“应用程序没有关闭游标或数据库对象”的错误。

 

解决办法:

检查数据库操作部分代码,在抛出错误处理部分,关闭游标及数据库对象(cursor or database object)

1
0
分享到:
评论

相关推荐

    fgdb_游标查找_游标实现数据库创建_

    在"游标实现数据库创建"这一环节,我们将看到如何使用游标创建新的数据库表。通常,这涉及到打开一个数据库连接,然后使用`cursor.execute()`方法执行SQL的CREATE TABLE语句。例如,创建一个包含字段的表可能如下所...

    Qt中SQlite数据库加密SqliteCipher 操作实例,打开多个数据库,附着数据库跨库查询.zip

    SQLiteCipher是一种针对SQLite数据库的加密解决方案,它提供了一种安全的方法来存储敏感数据,同时保持与标准SQLite API的兼容性。 首先,SQLiteCipher是SQLite的一个分支,它在数据库文件级别提供了AES-256加密。...

    SQLite数据库 加密解密工具

    SQLite数据库是一种轻量级、自包含的SQL数据库引擎,常被用在嵌入式系统和移动应用中。在处理敏感数据时,为了保护信息安全,对SQLite数据库进行加密是必要的步骤。本文将详细介绍如何使用.NET环境下的SQLite加密...

    易语言SQLite3数据库操作类模块源码

    易语言SQLite3数据库操作类模块源码是一种使用易语言编程实现的SQLite3数据库接口,它通过调用sqlite3.dll动态链接库的API函数,为易语言开发者提供了与SQLite3数据库进行交互的能力。SQLite3是一款轻量级、开源的...

    Delphi使用SQLite3内存数据库

    一种常见的方法是使用SQLite3的Delphi包装类,这允许开发者以面向对象的方式来操作数据库。这些包装类通常提供创建、打开、关闭数据库,执行SQL语句,以及处理结果集等功能。 3. **本地数据库加载到内存** 当需要...

    SQLiteCompareSetup(SQLite数据库比较工具)

    SQlite数据库工具 供比较两个SQLite数据库所用。

    安卓SQLite数据库相关-安卓Androidsqlite万能数据库.rar

    在安卓开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite数据库的优势在于它不需要独立的服务进程,可以直接嵌入到应用中...

    SQLite教程(一):SQLite数据库介绍

     SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。...

    SQLite.Interop.dll 配合SQLite Expert Professional 4.2可以打开加密数据库

    SQLite.Interop.dll 32和64位文件,配合SQLite Expert Professional 4.2可以打开加密数据库。 将SQLite.Interop.dll拷贝到SQLite Expert安装路径,然后打开SQLite Expert,Tools --> Options --> SQLite Library中...

    VB 6.0操作Sqlite数据库(查询、添加、更新、删除)

    在VB 6.0中操作SQLite数据库涉及到一系列的步骤和技术,包括连接数据库、执行SQL语句(查询、添加、更新和删除数据)以及处理结果。SQLite是一个轻量级的、自包含的数据库引擎,适用于各种应用程序,特别是那些需要...

    VB6 下使用SQLite 的完整例子,最全面

    在VB6(Visual Basic 6)环境下利用SQLite数据库是一个常见的需求,SQLite是一个轻量级、自包含、无服务器的SQL数据库引擎,适用于多种应用场景。这个“SQLite VB完整例子”提供了全面的示例代码,帮助开发者了解...

    Android源码——数据库SQLite.zip

    对于性能优化,可以考虑使用SQLite的编译器优化,如创建合适的索引、避免在WHERE子句中使用不推荐的操作符,以及适时地关闭不再需要的游标和数据库连接。 最后,文件名"1-120912223R80-L.png"可能是用来辅助说明的...

    VB6.0 操作SQLite 数据库的完整示例代码

    在VB6.0中操作SQLite数据库,是一种将轻量级、高性能的SQLite数据库与传统的Visual Basic编程环境相结合的方法。SQLite是一种自包含、无服务器、零配置、事务性的SQL数据库引擎,广泛应用于移动设备、嵌入式系统以及...

    Windows下SQLite创建数据库的方法

    在IT领域,尤其是在数据库管理与应用开发中,SQLite作为一个轻量级、高性能的数据库引擎,因其无需服务器进程、易于嵌入应用程序以及支持多种操作系统(包括Windows)的特点而广受欢迎。本文将详细介绍在Windows环境...

    数据库sqlite 小型数据库

    SQLite是一款轻量级的、开源的、自包含的数据库引擎,特别适合于嵌入式应用,无需单独的服务器进程,可以被直接集成到各种应用程序中。它的设计目标是提供一个可移植的、可靠的、高性能的数据库解决方案,尤其适用于...

    labview操作sqlite读、写数据库

    SQLite则是一个轻量级、自包含的SQL数据库引擎,广泛用于嵌入式系统和移动应用。在这个主题中,我们将深入探讨如何使用LabVIEW与SQLite数据库进行交互,包括读取和写入数据的操作。 首先,为了在LabVIEW中使用...

    使用C#开发的Sqlite数据库创建、操作的源码项目工程

    这是一个使用C#开发的Sqlite数据库创建、操作的源码工程,关于Sqlite的所有操作已经单独创建了专门的跨平台【.NETCore3.1】类库包含相应的帮助类,可以直接生成后拿到任何项目中直接使用,高效简单,省去了从头开发...

    Sqlite3 C++ 简单单例数据库操作类封装

    在IT领域,数据库管理是至关重要的,特别是在C++编程中,SQLite3是一个广泛使用的轻量级嵌入式数据库。本文将深入探讨如何在C++中使用SQLite3进行单例模式的数据库操作类封装,以便更高效、安全地管理数据库。 首先...

Global site tag (gtag.js) - Google Analytics