Android/sqlite 检测表是否包含列
所以我在市场上有一个应用程序,通过更新我想向数据库添加一些列。到目前为止没有问题。但我想检测正在使用的数据库是否缺少这些列,如果是这种情况,请添加它们。我需要动态完成此操作,而不仅仅是在更新到新版本后完成,因为应用程序应该仍然能够导入旧数据库。通常我可以使用 PRAGMA 查询,但我不确定如何使用 Android 执行此操作。我无法使用 execSQL,因为它是一个查询,而且我无法弄清楚如何将 PRAGMA 与 query() 函数一起使用。
当然,我可以捕获异常,然后添加列,或者在开始使用每个表之前始终将列添加到每个表中,但这不是一个巧妙的解决方案。
干杯,
So I have an app on the market, and with an update I want to add some columns to the database. No problems so far. But I want to detect if the database in use is missing these columns, and add them if this is the case. I need this to be done dynamically and not just after the update to the new version, because the application is supposed to still be able to import older databases. Normally I would be able to use the PRAGMA query, but Im not sure how to do this with Android. I cant use execSQL since it is a query, and I cant figure out how to use PRAGMA with the query()-function.
Ofcourse I could just catch exceptions and then add the column, or always add the columns to each table before I start to work with it, but that is not a neat solution.
Cheers,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
杂注起作用了。作为一个例子,我刚刚在我的一个 Android 应用程序数据库上尝试过它。
我们可以看到指定表中有三个字段。 ID、描述和消息。
因此,在您的应用程序中,请使用以下内容:
请原谅格式不当。
Pragma works. As an example I just tried it on one of my Android App DBs.
As we can see there are three fields in the specified table. id, description, and message.
So in your app, use something like:
Please excuse the poor formatting.
这可能有点过头了,但您可以从表中选择一行到 Cursor 中并使用 Cursor.getColumnIndex([column name as string])。如果不存在则返回-1。
This may be overkill, but you can select a single row from your table into a Cursor and use Cursor.getColumnIndex([column name as string]). This will return -1 if it doesn't exist.
尝试将
PRAGMA
与rawQuery()
一起使用,而不是query()
。Try using
PRAGMA
withrawQuery()
instead ofquery()
.您可以发出以下命令并查看结果并查看您的列是否已列出。
编辑:我从未在 Android 上这样做过,但我认为它应该可以工作
You could issue the following command and go over the results and see if your column is listed.
Edit: I've never done this on Android, but I think it should work