问题标签 [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 回答
2010 浏览

android - SQLiteOpenHelper 的静态 getApplicationContext

最近我一直在尝试在我的 android 应用程序中创建伪 AciveRecord 样式的 db 调用,并提出了一堆类方法,如 User.all(Context dbContext)、User.find(long id、Context dbContext)、User。 delete(long id, Context dbContext) 等。通过伪AciveRecord,我的意思是我不打算让它成为“真正的ActiveRecord 库”或类似的东西。我只想在我的代码中有一个易于理解的数据库调用,而 ActiveRecord 风格对我个人来说是最好的。到目前为止一切顺利,我对这段代码没有任何问题,例如:

但困扰我的是,当我打电话时,我一直在传递活动上下文或类似的东西,我想知道只给我的 User 类(它有 User.find,User. all,等等)一个静态变量,它将存储每个数据库查询的应用程序上下文?它可以在应用程序午餐或第一个查询请求之前完成。

我的想法来自 iOS CoreData 的东西,你可以从共享应用程序中获得几乎所有查询的静态上下文管理器。

有什么想法、建议、想法吗?

谢谢。

0 投票
1 回答
232 浏览

android - Sqlite 查询产生 Nullpointer 异常?

为什么android中的SqlLite查询会产生Nullpointer异常我正在使用这段代码

0 投票
3 回答
2314 浏览

android - Android:在数据\数据中看不到应用名称

我尝试在 Android 上使用 SQLite。我想查看我的数据库文件。所以,我使用Android File Explorer并浏览了这个链接: Data\data\App_name但是在Data\data. 我看不到我的应用名称。(在下面的代码中将是:com/app/TimeTracker)

这是我要测试的代码:

首先是我的主程序:

第二个是我的数据库助手:

以上两个文件有问题吗?如果有,请告诉我是什么。如果没有,请告诉我如何解决这个问题。

谢谢 :)

@Edit:我添加了我的数据文件夹的屏幕截图。(lib文件夹中没有文件)

截屏

0 投票
1 回答
1092 浏览

string - SQLiteOpenHelper中如何引用String

我有一个扩展 SQLiteOpenHelper 的活动,我想从我的 strings.xml 中的资源中引用一个字符串

当我使用:
资源 res = getResources();
字符串注 = res.getString(R.string.M1Details);

我收到错误:对于 NotesSQL.DbHelper 类型的方法 getResources() 未定义

我也试过:
String Note = getString(R.string.M1Details);

我得到: 对于 NotesSQL.DbHelper 类型,方法 getString(int) 未定义

我想知道如何从资源 xml 中正确引用字符串提前谢谢!:)

0 投票
1 回答
124 浏览

android - NPE 引用存在于服务中、由数据库初始化的变量以在活动中使用时的 NPE

与标题不同,我会尽量做到清晰、简洁和中肯(希望这不是 TL;DR)我知道标题很难理解,所以希望我的问题不会。我有一个无法在堆栈跟踪或调试模式(运行 eclipse)中追踪的 NPE。堆栈跟踪指向一行,但无论我更改什么,我似乎都无法在不抛出 NPE 的情况下运行它(稍后我会指出具体的行)。所以我有一个活动、一个 SQLiteOpenHelper 和一个服务。除了这三个类之外,我还将包括第四个类的片段,即我的 Splash 类。上述服务是通过我的 Splash 类启动的,使用以下代码(我将解释为什么我稍后会包含它):

重要的是,我在继续之前指出 MyService.class 中的变量“ID”是由另一个活动设置的,我不会在此处包括。只要知道变量确实设置正确,当用户更改时它会正确更改,并且我已经在代码中的各个点放置了 Log.I(TAG, TEXT) 语句以确保它有效并且数据始终保持一致。我还验证了我的服务正在正确启动,所以这也不是问题。继续。这是我稍后引用的 SQLiteOpenHelper 类中的方法(我已经尽可能地精简代码,因此我只包含相关信息。)

}

我已经验证了数据库处理程序可以正常工作,因为我可以从代码中的许多其他点调用它而不会出现问题。这个特定的方法每次也有效(事实上,整个类都可以正常工作......除非这个 NPE 弹出)表中的数据在我遗漏的 DB 类的一部分中被初始化,我'已经验证所有这些都有效。所以,继续前进,请假设我的数据库类在我的应用程序中的所有点都可以完美地工作,除了我稍后将向您展示的那一行。接下来我们有我的服务类,它看起来像这样(有问题的行在这里,我稍后会指出):

}

在方法“public void init()”中,NPE 指向“name = dbHelper.getData(ID, 1);” 请注意,我可以在我的应用程序的其他地方使用这行 EXACT 代码,它可以正常工作……但在这里,它一次又一次地失败。最后我有调用我的服务来获取这些数据的活动。下面,我调用 MyService.init(),这就是 gremlins 出现的地方。无论我做什么,我都无法让它发挥作用。出于某种原因使用 name = dbHelper.getData(ID, 1); 以这种方式使它吹一个垫圈。

}

基本上,这让我发疯。我已经通读了android Docs,直到我的眼睛在流血。搜索谷歌。没有什么在我脑海中点击灯说“哦,那是我做错了”另外(我之前问过这个问题,但它被关闭了,因为我在没有支持数据的情况下问它)我想知道通过将我的服务声明为新变量来实例化我的服务(就像我在上面的活动中通过声明 MyService fooService = new MyService() 所做的那样)与像我在启动类中使用意图在这个问题的最开始。

他们有区别吗?我正在实例化它,因为如果我只是调用服务(即在上面的 Activity 中使用 MyService.name 而不是 fooService.name),那么我必须将“name”变量设置为静态......这反过来意味着我必须将'dbHelper'设置为静态... SQLiteHelper 根本不同意(不能对sqliteopenhelper 中的非静态方法进行静态引用)。

我希望这是足够的信息。如果需要,我可以在堆栈跟踪中包含一个 pastebin,但我必须警告你,我已经对上面的代码进行了相当多的修改以使其适合,并更改了类和变量的名称,以便它产生更多在这种有限的背景下有意义。简而言之,堆栈跟踪指向上述活动,然后指向 MyService.init() 行,然后(最终)指向服务中的 name = DbHelper(ID, 1) 行。感谢您的任何帮助!!!

编辑:简而言之,问题在于传递上下文以及您传递的上下文类型。对于阅读此内容并遇到相同或类似问题的任何人:尝试更改您传递给 SQLiteOpenHelper 的上下文。

0 投票
1 回答
1129 浏览

android - Android - 将我的 Sqlite3 数据库放入 Eclipse 的合适位置?

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

这家伙讲android系统路径:

//你的应用程序数据库的Android默认系统路径。
私有静态字符串 DB_PATH = "/data/data/YOUR_PACKAGE/databases/";

在这里: DB_PATH = "/data/data/com.android.example/databases/" 在有关 sqlite 数据库的许多其他链接中。

问题是,eclipse(在mac osx 10.7上)没有创建数据目录,而在我的motorola xoom(有Android 4.0.3 - 冰淇淋三明治)上,我无法确定它的默认系统路径是什么。我没有看到任何关于 /data/data/... 使用 Astro 文件管理器的内容。

由于我使用的是 mac,我不得不使用 android 文件系统应用程序将我的 apk 文件从我的 eclipse 工作区传输到 motorola xoom。我想我的一个问题应该是——在哪里放置这个或重要的地方是什么?

我已经下载了 Sqlite 数据库浏览器,并按照上面的链接填写了我的数据库。我没有任何主键。我已将 .db 文件复制到项目中的资产文件夹中 - 也如链接所述。

另外,由于我的数据库已经创建了表,所以我需要做的(我猜)就是将表复制到每个人都提到的那个数据目录,然后我应该能够进行插入/更新/选择等操作?

到目前为止我的代码:

}

0 投票
2 回答
1230 浏览

android - 如何在不重新创建表的情况下升级设备上预填充的 sqlite 数据库?

我在下面有我的代码。它在我的资产文件夹中正确读取了我的 sqlite 数据库文件(我已经使用 SQLite 数据库浏览器创建了) - 将其移动到我设备上的 /data/data/packagename/databases/ 路径,然后我可以使用查询和光标来获取我的信息,效果很好。代码在这里:

现在我不得不返回并使用 SQLite 浏览器向其中一个表(在资产文件夹中的数据库中)添加一行信息,但这并没有反映在我的光标输出中 - 我明白为什么会这样- 因为 if(!dbFile.exists()) 失败所以没有复制要做。所以我的问题是 - 我需要添加什么代码才能完成这项工作?我从来没有用代码创建表,所以我看不出 onUpgrade 方法对我有多大用处。

0 投票
1 回答
296 浏览

android - 从 Mac OSX 切换到 Windows 7 后,Android SQLite 代码不起作用

昨晚我让这段代码在家工作,Whatzit 是一个很好的帮助。我让一切正常(注释掉了 dbFile 存在检查,并且只是将我想使用 sqlite 浏览器进行的任何更改复制到数据库中)。

今天早上我把我的平板电脑带到一台 Windows 7 机器上,卸载了应用程序并尝试从 eclipse 运行相同的代码。我不断收到错误消息:

03-12 11:51:39.320:E/AndroidRuntime(20365):原因:java.io.IOException:试图复制数据库 - 错误:/data/data/mypackage/databases/restaurant.db:打开失败:ENOTDIR (不是目录)

我已经在我的mac上压缩了我的项目并将其解压缩到windows机器上eclipse中的同一个项目目录中,并且在eclipse中刚刚执行了刷新。

想知道我可能会尝试什么吗?我尝试卸载该应用程序,将 .apk 复制回来并再次安装,但似乎没有任何效果。谢谢。

*我实际上是在实际设备上运行它 - 摩托罗拉 Xoom 4.0.3

canWrite 和 canRead 的结果都返回为假。正如我在这里打字一样,这是完美无缺的。我不知道为什么将平板电脑连接到运行与 Eclipse 相同版本的 Windows 机器上会有什么不同。

0 投票
3 回答
1821 浏览

android - SQLiteOpenHelper 使 Android 应用程序崩溃

我遵循了有关如何使用 android SDK 处理 SQLite 数据库的教程。我的问题是当我调用方法“getUsername()”时应用程序崩溃。我究竟做错了什么?

0 投票
4 回答
2352 浏览

android - Android SQLiteException:没有这样的列

我试图更新我的数据库,但每次我收到一个错误说没有这样的列。我仍然是 Android 的初学者,所以任何帮助将不胜感激。

先感谢您。

这是我的 2 个数据库类:

区域监控数据库:

区域监控提供者:

在我的主要活动中,我使用以下方法更新它:

日志猫:

@SLUKIAN 能否请您检查一下 CursorIndexOutOdBounds 异常的代码

日志猫: