4

所以我在市场上有一个应用程序,并且通过更新我想向数据库添加一些列。到目前为止没有问题。但我想检测正在使用的数据库是否缺少这些列,如果是这种情况,请添加它们。我需要动态完成此操作,而不仅仅是在更新到新版本之后,因为应用程序应该仍然能够导入旧数据库。通常我可以使用PRAGMA查询,但我不确定如何使用 Android 执行此操作。我不能使用 execSQL,因为它是一个查询,而且我不知道如何将 PRAGMA 与 query() 函数一起使用。

当然,我可以捕获异常然后添加列,或者总是在开始使用它之前将列添加到每个表中,但这不是一个简洁的解决方案。

干杯,

4

4 回答 4

12

Pragma 有效。例如,我刚刚在我的一个 Android App DB 上进行了尝试。

sqlite> pragma table_info (userCommand);

cid name        type    notnull     dflt_value  pk
0   id      INTEGER     0       1
1   description TEXT    0       0
2   message     TEXT    0       0

如我们所见,指定表中有三个字段。id、描述和消息。

所以在你的应用程序中,使用类似的东西:

Cursor c = null;
c = RawQuery ("pragma table_info (userCommand)",null); 
// if c has records and is not null then iterate through the records in search of your table name. 

请原谅格式不佳。

于 2010-04-20T14:21:30.300 回答
3

这可能有点矫枉过正,但您可以从表中选择一行到光标中并使用 Cursor.getColumnIndex([column name as string])。如果它不存在,这将返回 -1。

于 2010-04-20T13:45:59.897 回答
3

尝试使用PRAGMAwithrawQuery()而不是query().

于 2010-04-20T14:02:02.827 回答
0

您可以发出以下命令并查看结果并查看您的列是否已列出。

pragma table_info(table_name);

编辑:我从来没有在 Android 上做过这个,但我认为它应该可以工作

于 2010-04-20T13:39:54.563 回答