所以我在市场上有一个应用程序,有了更新,我想在数据库中添加一些列。到目前为止没问题。但我想检测正在使用的数据库是否缺少这些列,如果是这种情况则添加它们。我需要动态完成此操作,而不仅仅是在更新到新版本之后,因为应用程序应该仍然能够导入旧数据库。通常我可以使用PRAGMA查询,但我不知道如何使用Android执行此操作。我不能使用execSQL,因为它是一个查询,我无法弄清楚如何使用PRAGMA与query() - 函数。
当然我可以捕获异常然后添加列,或者在我开始使用它之前总是将列添加到每个表中,但这不是一个简洁的解决方案。
干杯,
答案 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)
尝试将PRAGMA
与rawQuery()
一起使用,而不是query()
。
答案 3 :(得分:0)
您可以发出以下命令并检查结果,看看您的列是否已列出。
pragma table_info(table_name);
编辑:我在Android上从未这样做过,但我认为它应该可行