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)
分享到:
相关推荐
在"游标实现数据库创建"这一环节,我们将看到如何使用游标创建新的数据库表。通常,这涉及到打开一个数据库连接,然后使用`cursor.execute()`方法执行SQL的CREATE TABLE语句。例如,创建一个包含字段的表可能如下所...
SQLite数据库是一种轻量级、自包含的SQL数据库引擎,常被用在嵌入式系统和移动应用中。在处理敏感数据时,为了保护信息安全,对SQLite数据库进行加密是必要的步骤。本文将详细介绍如何使用.NET环境下的SQLite加密...
易语言SQLite3数据库操作类模块源码是一种使用易语言编程实现的SQLite3数据库接口,它通过调用sqlite3.dll动态链接库的API函数,为易语言开发者提供了与SQLite3数据库进行交互的能力。SQLite3是一款轻量级、开源的...
SQlite数据库工具 供比较两个SQLite数据库所用。
SQLiteCipher是一种针对SQLite数据库的加密解决方案,它提供了一种安全的方法来存储敏感数据,同时保持与标准SQLite API的兼容性。 首先,SQLiteCipher是SQLite的一个分支,它在数据库文件级别提供了AES-256加密。...
一种常见的方法是使用SQLite3的Delphi包装类,这允许开发者以面向对象的方式来操作数据库。这些包装类通常提供创建、打开、关闭数据库,执行SQL语句,以及处理结果集等功能。 3. **本地数据库加载到内存** 当需要...
在安卓开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite数据库的优势在于它不需要独立的服务进程,可以直接嵌入到应用中...
SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。...
SQLite是一款轻量级的、开源的、嵌入式的关系型数据库管理系统,广泛应用于移动设备、桌面应用以及服务器环境。在SQLite中,数据库文件是数据库的所有数据和元数据的存储容器。当数据库中的数据被删除或者更新后,...
在IT领域,数据库管理是至关重要的,特别是在C++编程中,SQLite3是一个广泛使用的轻量级嵌入式数据库。本文将深入探讨如何在C++中使用SQLite3进行单例模式的数据库操作类封装,以便更高效、安全地管理数据库。 首先...
SQLite.Interop.dll 32和64位文件,配合SQLite Expert Professional 4.2可以打开加密数据库。 将SQLite.Interop.dll拷贝到SQLite Expert安装路径,然后打开SQLite Expert,Tools --> Options --> SQLite Library中...
对于性能优化,可以考虑使用SQLite的编译器优化,如创建合适的索引、避免在WHERE子句中使用不推荐的操作符,以及适时地关闭不再需要的游标和数据库连接。 最后,文件名"1-120912223R80-L.png"可能是用来辅助说明的...
在IT领域,尤其是在数据库管理与应用开发中,SQLite作为一个轻量级、高性能的数据库引擎,因其无需服务器进程、易于嵌入应用程序以及支持多种操作系统(包括Windows)的特点而广受欢迎。本文将详细介绍在Windows环境...
SQLite是一款轻量级的、开源的、自包含的数据库引擎,特别适合于嵌入式应用,无需单独的服务器进程,可以被直接集成到各种应用程序中。它的设计目标是提供一个可移植的、可靠的、高性能的数据库解决方案,尤其适用于...
SQLite则是一个轻量级、自包含的SQL数据库引擎,广泛用于嵌入式系统和移动应用。在这个主题中,我们将深入探讨如何使用LabVIEW与SQLite数据库进行交互,包括读取和写入数据的操作。 首先,为了在LabVIEW中使用...
在VB 6.0中操作SQLite数据库涉及到一系列的步骤和技术,包括连接数据库、执行SQL语句(查询、添加、更新和删除数据)以及处理结果。SQLite是一个轻量级的、自包含的数据库引擎,适用于各种应用程序,特别是那些需要...
在VB6(Visual Basic 6)环境下利用SQLite数据库是一个常见的需求,SQLite是一个轻量级、自包含、无服务器的SQL数据库引擎,适用于多种应用场景。这个“SQLite VB完整例子”提供了全面的示例代码,帮助开发者了解...
在Android开发中,SQLite数据库是默认的轻量级数据库,用于存储应用的数据。SQLite支持标准的关系型数据库特性,如SQL语法、事务处理等,且它体积小、无服务器、文件化,非常适合移动设备使用。本篇文章将深入探讨...