问题标签 [sqliteopenhelper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1307 浏览

android - 在不使用主键的情况下查询 android sqlite 数据库会引发错误 java.lang.NullPointerException

我在 android 中开发了一个地图应用程序,它根据用户的搜索输入在数据库中搜索地点。我试图使用一个字段来查询 sqlite 数据库,该字段将在数据库中搜索并返回所有在数据库中的地方的纬度。该字段不是下面的主键是代码。请我需要帮助。用于创建和访问数据库的数据库类。

// Places.java 的构造函数

//数据库助手类

}

}

}

触发操作以查询数据库的方法。

请我想根据地点的通用名称返回纬度,但是当我尝试查询 generic_name 列时,它返回 java.lang.NullPointerexception 。在它下面是当按下查询数据库的按钮时我得到的日志猫

0 投票
1 回答
499 浏览

java - 尝试将资产文件夹中的数据库复制到应用程序的数据库文件夹中时遇到的问题

我目前正在处理一个项目,但我在尝试将资产文件夹中的数据库复制到应用程序的数据库文件夹中时遇到了问题。现在我什至无法将它复制到应用程序的文件夹中。但是,在我之前的一次尝试中,我设法将其复制到应用程序的数据库文件夹中,但发现它是一个空数据库。我真的无法弄清楚这一点。有什么建议么?

这里用于复制数据库的代码:

希望你们能帮帮我。

0 投票
1 回答
1084 浏览

android - Android SQLite DatabaseObjectNotClosedException


android.database.sqlite.DatabaseObjectNotClosedException在我正在构建的 PoC Android 应用程序中,当应用程序关闭时调用垃圾收集器时 ,我得到了一个消息。即使我在我正在使用SQLiteDatabaseSQLiteOpenHelper对象上调用 close 方法,也会发生这种情况。

我正在使用包含用于在构造函数中打开数据库的代码的 DAO(从 anAsyncTask.doInBackground中调用Activity)访问数据库,并且此构造函数是从onCreate()活动的方法中调用的。

我还有一个关闭SQLiteDatabase对象的方法,该方法是从同一活动的方法中SQLiteOpenHelper调用的。onPause()数据库读/写是在doInBackgroundAsyncTask 的方法中执行的。

我已经覆盖了以下close()方法SQLiteOpenHelper

我从close()我的 DAO 类中的一个方法中调用它。

如果需要进一步澄清,请告诉我。
谢谢,
德博吉特

编辑 1:
这是从 db 获取的代码。

0 投票
3 回答
217 浏览

android - 是否有任何类被视为 android 中的上下文,或者是否有一些特定的事情必须做?

我有这个类,省略了代码以使其更具可读性:

我评论了我的错误在哪里。我在网上查看了其他示例,其他所有人都将其发送到扩展 SQLiteOpenHelper 的类中,这使我认为它应该可以工作。但它不是。我的代码如下:

我的假设是错误的吗,我是否遗漏了什么。

0 投票
2 回答
2469 浏览

sqlite - 关于 sqlite 复制

我正在使用 c++ linux 在我的应用程序中的 sqlite db 中工作。我需要在另一台机器上复制 sqlite 数据库。

为此,由于 sqlite 没有复制机制,也没有任何网络 API,我想使用 c++ fstream 读取 sqlite db 文件并在另一台机器上创建一个新的 db 文件。

我挣扎了一天。

任何人都可以在这方面帮助我。

下面是代码:

0 投票
2 回答
11560 浏览

android - 并发写入android数据库(来自多个服务)?

我在 android sqlite 数据库和并发写入方面存在严重问题。为了更好地解释,我会给你一个现实生活中的例子:

我有一个桌面小部件,其中显示了我的数据库中的项目列表(在后台我有 DataService,它定期从我的远程服务器收集新数据,并用它们更新我的数据库)。所以 - 当我点击列表中的某个项目时,我需要更新数据库中点击的项目(=做写操作)。但是,当我准确地单击项目时,当 DataService 正在更新我的数据库中的新数据时,它当然会记录如下错误:

通常它很难模拟,但如果你安排 DataService 例如每 10 秒运行一次(只是为了演示),你可以很容易地模拟这个错误。

我的问题是,如何处理?我在文档中读到,如果同时有两个写事件,只有第一个会被执行,第二个会被记录为错误。听起来很奇怪,必须有其他选项,例如第二次写入会等到第一次写入完成。或者也许其他解决方案?试图阅读文档,但似乎谷歌文档中没有很好地涵盖该项目......几乎我拥有的所有信息,都是在官方页面以外的地方找到的。

PS:这是我的 DBHelper 类的缩短版本:

0 投票
2 回答
6601 浏览

android - 在 Android 中并发访问 SQLite 数据库 - db 已关闭

我阅读了很多关于这个主题的主题,但没有人能回答我的问题。

我从并发线程访问我的数据库,我的 SQLiteOpenHelper 实现了单例的设计模式,所以我的应用程序只有一个实例。

我用这样的代码访问我的数据库:

我不明白为什么我仍然收到“数据库已关闭”错误,getWritableDatabase() 方法不应该在调用 close() 之前锁定数据库吗?来自其他线程的其他 getWritableDatabase() 调用应该等到数据库关闭?这是对的还是我错过了什么?

0 投票
2 回答
1894 浏览

android - 在我退出活动并重新启动之前,我的 Android SQLite DB 查询不会返回新插入的数据

我在我的 android 应用程序中使用 SQLite DB 来存储足球运动员并维护他们所属的名单。管理这些花名册的活动能够打开 2 个对话窗口,1 个用于将当前花名册保存到数据库,1 个用于从数据库加载现有花名册。

保存花名册然后打开加载花名册的对话框时,在我对现有花名册的查询中找不到新保存的花名册。如果我退出活动并重新启动它,则会列出新的名册并且可以正常加载。

这是在数据库中查询现有名册名称的代码

这是将花名册插入数据库的代码 public void insertRoster(String roster_name, LeagueRoster roster){

最后,这是我的活动中创建两个不同对话框的代码

如果有人有任何想法,我将非常感谢您对这个问题的帮助......

0 投票
1 回答
7268 浏览

android - 将 JSON 字符串解析为 SQLite 表的最快方法是什么?

我正在编写一个 Android 应用程序,它偶尔需要下载一个大约 1MB 并包含大约 1000 个元素的 json 字符串,并将每个元素解析到一个 SQLite 数据库中,我用它来填充 ListActivity。

即使下载和解析不是每次与应用程序交互时都需要完成的事情(仅在首次运行或用户选择刷新数据时),我仍然担心解析部分花费的时间太长,大约两到三分钟 - 从手机应用程序的角度来看,这似乎是永恒的!

我目前正在使用 Gson 将每个 json 对象解析为我定义的自定义对象,然后使用 SQLiteOpenHelper 将其输入数据库。

我的问题是 - 有没有更快的方法来实现这个?在不使用 Gson 的情况下直接与 json 交互会明显更快吗?还是我在下面的代码中做了一些愚蠢的事情来减慢速度?

这是我在 AsyncTask 中使用的将 json 解析为 SQLite 的方法:

这是我的 VegDataHandler 类中的 addCompany 方法,它扩展了 SQLiteOpenHelper:

这是在添加到 SQLite 之前保存每个 json 元素的类(为简洁起见,我省略了 getter 和 setter)。

提前感谢您的任何回复。

0 投票
1 回答
2020 浏览

android - 对 CursorLoaders 感到困惑,并将它们与自定义 SQLiteOpenHelper 一起使用

我正在编写一个应用程序,允许人们为他们需要执行的各种任务设置警报。我目前的计划是将所有相关数据存储到 SQLite 数据库中。为此,我创建了一个扩展 SQLiteOpenHelper 的类,并在其中填充了处理我期望必须接受的所有 CRUD 的方法。知道在一个线程上进行所有处理通常是一个坏主意,我查找了在线程之间分离工作的方法,并找到了 CursorLoader 和 LoaderManager,这似乎很理想,因为它们在 Android 兼容库中可用。但是,LoaderManager 似乎需要按照文档中的教程进行的 ContentProvider,并且我还没有真正看到需要对 ContentProviders 做任何事情,因为我不打算允许其他应用程序访问数据。如果没有 ContentProvider,我不知道我应该如何为我的数据库获取一个 Uri 以输入 CursorLoader。有没有办法让我继续使用扩展 SQLiteOpenHelper 的类并仍然实现 LoaderManager 以允许我将所有填充的 ListFragments 与我的光标保持在 UI 线程之外?