SQLCipher - 完成尚未停用的游标错误

发布于 2024-12-23 04:30:07 字数 1855 浏览 2 评论 0原文

我的问题与这个一个非常相似,但略有不同。当我只是尝试查询表中已由 SQLCiper 加密的所有内容时,出现以下错误。

 12-29 11:37:54.329: E/Cursor(10837): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.company.myapp/databases/data, table = data_table, query = SELECT rowid, data FROM data_table
 12-29 11:37:54.329: E/Cursor(10837): info.guardianproject.database.sqlcipher.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteCursor.<init>(SQLiteCursor.java:225)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1410)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1289)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1243)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1325)
 12-29 11:37:54.329: E/Cursor(10837):   at com.company.appName.DatabaseManager.queryAllItems(DatabaseManager.java:105)

我认为只有在使用完光标后忘记关闭光标时才会发生此错误,但似乎在开始使用它之前我就收到了此错误。

以下是 queryAllItems() 方法中的代码:

public Cursor queryAllItems() {
    return database.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_DATA}, null, null, null, null, null);
}

My question is very much similar to this one but slightly different. I get the following error when I simply try to query everything in my table that has been encrypted by SQLCiper.

 12-29 11:37:54.329: E/Cursor(10837): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.company.myapp/databases/data, table = data_table, query = SELECT rowid, data FROM data_table
 12-29 11:37:54.329: E/Cursor(10837): info.guardianproject.database.sqlcipher.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteCursor.<init>(SQLiteCursor.java:225)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1410)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1289)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1243)
 12-29 11:37:54.329: E/Cursor(10837):   at info.guardianproject.database.sqlcipher.SQLiteDatabase.query(SQLiteDatabase.java:1325)
 12-29 11:37:54.329: E/Cursor(10837):   at com.company.appName.DatabaseManager.queryAllItems(DatabaseManager.java:105)

I thought that this error would only happen if I forgot to close the Cursor after I was done using it but it seems that I'm getting this error even before I'm able to start using it.

Here's the code that's in the queryAllItems() method:

public Cursor queryAllItems() {
    return database.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_DATA}, null, null, null, null, null);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋竹姑娘 2024-12-30 04:30:07

我被堆栈跟踪误导了,看来我只需要在查询的所有操作完成后调用 Cursor.deactivate() 和 Cursor.close() 即可。

I was misled by the stack trace and it appeared that I just need to call Cursor.deactivate() and Cursor.close() after all my operations on the query were done.

逆流 2024-12-30 04:30:07

创建游标后,如果调用 startManagingCursor(c); 将解决该问题。这里的“c”是光标引用。

After creating cursor, if you call startManagingCursor(c); will resolve the issue. Here 'c' is cursor reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文