SQLite数据库错误,无用日志

2023-12-01

我发布了应用程序的更新,但从用户那里收到了大量错误,我无法重新创建它或查明问题。

我收到两个错误:java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase

java.lang.IllegalStateException: database not open

错误发生在以下代码中的某处:

public DBUserC getUser(int _id){
        synchronized (DBAdapter.LOCK){
            M.openDB(context);
            Cursor cursor = M.database.query(DBUserHelper.TABLE_USERS,
                    VUser.allColumns, DBUserHelper.COLUMN_ID + " = '"+_id+"'", null, null, null, null);
            DBUserC user;
            if (cursor.moveToFirst()){
                user = cursorToInfo(cursor);
            } else{
                user = newUser();
            }
            cursor.close();
            M.closeDB();
            return user;
        }
        }

在此版本中,有一个数据库升级,其中我通过以下方式执行三个查询db.execSql。它不在单独的线程中。

每次调用数据库时(除了onUpgrade),我同步,然后打开它,运行我的代码,然后关闭它。在这次升级之前我没有遇到任何问题,但找不到问题。

任何帮助将不胜感激。

EDIT:要打开我的数据库,我这样做:

if (helper==null)
    helper = new DBAdapter(context);
if (database==null){
     database = helper.getWritableDatabase();
} else if (!database.isOpen())
     database = helper.getWritableDatabase();

并关闭:

helper.close();
helper = null;
database = null;

获取信息的示例方法:

    public DBUserC getUser(int _id){
        synchronized (DBAdapter.LOCK){
            openDB(context);//this is the open code above
            Cursor cursor = M.database.query(DBUserHelper.TABLE_USERS,
                    VUser.allColumns, DBUserHelper.COLUMN_ID + " = '"+_id+"'", null, null, null, null);
            DBUserC user;
            if (cursor.moveToFirst()){
                user = cursorToInfo(cursor);//does not contain DB operations
            } else{
                user = newUser(); ////does not contain Database operations
            }
            cursor.close();
            closeDB();//This is the close code above
            return user;
        }
    }

AHost.onCreate

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        M.initializeDB(context); //synchronized call to the openDB code I posted above
        M.openDataDB(context); //opens a different database by a different file name. This DB is not an issue

        //irrelevant ui setup
        int _id = pref.getInt(P.eLastUser, VUser.ID_NEW);//row id of user

        M.requeryUser();//synchronized, access database
        M.switchUser(_id);//synchronized, access database

    }

我在我的一个应用程序中遇到了同样的问题,我如何解决这个问题是通过删除cursor.close()。希望它会有所帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite数据库错误,无用日志 的相关文章

随机推荐

  • 如何在C#中获取倒数第二个字符串

    示例1 string input Village Siaban WDT no 39 91308 Semporna Sabah 示例2 string input Village Hw WDT no 39 91308 Sandakan Sara
  • 在循环中返回负结果

    我无法确定代码中的确切问题 我有两个功能 inrange 检查端口是否在范围内 以及filt 它接受一个 txt 文件 查找关键字 UDP 或 TCP 查看端口 紧接在 标记之后 并检查该数字是否在范围内 def inrange file
  • 即使构建步骤失败,如何继续 Jenkins 构建?

    我正在 Jenkins 中使用 Phing 构建脚本 并希望在作业中端到端运行它并捕获所有报告 问题是它停止在失败的构建步骤上进行构建 有没有一种方法或插件即使失败也能继续工作 Thanks 我对 Phing 不太了解 但是 由于它基于 A
  • 用于验证 Outlook 全局地址列表中找到的电子邮件地址的 VBA 代码

    问题描述 在将电子邮件发送到 Excel 中的可用 Outlook 电子邮件帐户列表之前 删除全局地址列表中未找到的非活动 非现有 电子邮件帐户 解决方案 运行 sql 查询从数据库中获取用户名或用户电子邮件 ID 步骤1 查询1 strS
  • 使用 nservicebus 延迟消息

    我正在处理 nServiceBus 我想在失败时重试并在另一时间发送一条消息 我听说过 Bus Defer 但我对它的理解有限 我有一个检查股票代码的系统 它会检查命令何时被调用 并在晚上 8 点之后重新安排另一次检查 我有 CheckCu
  • 如何使用 dplyr 过滤数据而不丢失 NA 行

    如何在 R 中对数据进行子集化而不丢失 NA 行 上面的帖子使用逻辑索引的子集 有没有办法在 dplyr 中做到这一点 Also dplyr什么时候自动删除NA 根据我的经验 当我过滤掉特定字符串时 它会删除 NA 例如 b a gt fi
  • LittleMonkey QRScanner 库构建问题

    我使用过littleMonkey QRScanner 库 但它可以在模拟器中工作 显示扫描仪不支持对话框 但是当我构建项目时它给出了构建错误 PS 我已经删除了所有构建提示并再次刷新库 但仍然存在同样的问题 我按照建议保留了 cn1 cod
  • 应用内结算,无法使 RESULT_DEVELOPER_ERROR 消失

    我正在尝试在 Android 上进行应用内计费 但 在尝试初始化事务时不断获得以下 logcat 输出 from logcat BillingService Billing service connected CheckBillingSup
  • python 正则表达式不匹配序列

    我需要用 HTML 标签包装一些 MathJax 字符串 我想知道如何排除 从搜索字符串不匹配完整字符串 使用单个字符很容易 例如 但是当我需要做同样的事情时该怎么办 例如两个字符相继出现 search str ce sigma s b H
  • scala 不明确支持依赖类型的任何原因?

    有路径依赖类型 我认为在 Scala 中可以表达 Epigram 或 Agda 等语言的几乎所有功能 但我想知道为什么 Scala 不支持this更明确地说 它在其他领域 例如 DSL 做得很好 我错过了什么 比如 没有必要 吗 除了语法便
  • 根据选择将 JSON 数据输入 Spinner

    Data is coming form JSON RESPONSE In JSON Every Tag contains number of nodes Relevant data into second spinner is based
  • 如何更改 Google 本机文档中的元数据语言

    我可以使用 API Drive 2 0 将本机 Google 文档创建到 Google Drive 但是 我无法更改语言正文文档 我认为 TargetLanguage 和 SourceLanguage 属性有其他目标 并且它们不允许在 SD
  • 如何发送数组作为 (jquery) ajax 请求的一部分

    我尝试发送一个数组作为 ajax 请求的一部分 如下所示 var query in between I add some values to query ajax url MyServlet data query dataType json
  • 使用 null 的方法重载选择

    鉴于此代码 class Overloading extends Object static public void target Object val String chk System out println Object val Sho
  • Joomla 错误:“非法变量 _files 或 _env 或 _get 或 _post 或 _cookie 或 _server 或 _session 或全局变量传递给脚本”

    我在 Joomla 中收到此错误 Illegal variable files or env or get or post or cookie or server or session or globals passed to script
  • 按元组的指定元素对具有元组键的字典进行排序

    我有一个字典列表 字典键是元组 例如 0 5 我想按元组的值对列表进行排序 1 我尝试使用方法列表排序的关键参数 但我不知道要在 lambda 中放入什么 我尝试这样做 key lambda k 1 输入示例 5 9 item 0 4 it
  • JTextField 时间(HH:mm:ss)

    我有一个浮动的特定任务所需的估计时间 以分钟为单位 如何将其放入 JFormattedTextField 中 格式为HH mm ss 对于 Calendar and DateFormat float minutes 100 5f 1 40
  • 如何在Python中使用联合类型? [复制]

    这个问题在这里已经有答案了 我找到了以下代码 def get iterator from config config dict data dict iterator config config dataset iterator iterat
  • Solrj 从 Android 索引文档

    我正在尝试使用 Android 应用程序中的 Solrj 来索引文档 但它似乎不起作用 我关注这个LINK 这是我正在编写的代码 package com example secondapp import android app Activi
  • SQLite数据库错误,无用日志

    我发布了应用程序的更新 但从用户那里收到了大量错误 我无法重新创建它或查明问题 我收到两个错误 java lang IllegalStateException attempt to re open an already closed obj