检测表是否包含Android / sqlite中的列

时间:2010-04-20 13:20:15

标签: android sqlite pragma

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

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

干杯,

4 个答案:

答案 0 :(得分: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,description和message。

因此,在您的应用中,请使用以下内容:

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. 

请原谅糟糕的格式。

答案 1 :(得分:3)

这可能有点过分,但您可以从表中选择一行到Cursor中并使用Cursor.getColumnIndex([列名称为字符串])。如果它不存在,则返回-1。

答案 2 :(得分:3)

尝试将PRAGMArawQuery()一起使用,而不是query()

答案 3 :(得分:0)

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

pragma table_info(table_name);

编辑:我在Android上从未这样做过,但我认为它应该可行