2010-04-20 158 views
4

因此,我在市场上有一个应用程序,并且有更新,我想向数据库添加一些列。目前没有问题。但是我想检测正在使用的数据库是否缺少这些列,并在这种情况下添加它们。我需要动态完成此操作,而不仅仅是在更新到新版本之后,因为应用程序应该仍能够导入较旧的数据库。通常我可以使用PRAGMA查询,但我不知道如何使用Android来做到这一点。我不能使用execSQL,因为它是一个查询,我无法弄清楚如何在查询()函数中使用PRAGMA。检测表中是否包含Android/sqlite中的列

Ofcourse我可以只是捕捉异常,然后添加列,或者始终将列添加到每个表之前,我开始使用它,但这不是一个整洁的解决方案。

干杯,

回答

11

Pragma的作品。作为一个例子,我刚刚在我的Android应用程序数据库中尝试过它。

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. 

请原谅穷人格式。

0

可以发出以下命令,再三的结果,看看是否会列在列。

pragma table_info(table_name); 

编辑:我从来没有这样做在Android,但我认为它应该工作

+0

我HAVA已经尝试过这一点,因为在这个问题规定:。。。“( – pgsandstrom 2010-04-20 13:42:21

+0

我的坏就像我说没有尝试过Android上的尝试CommonsWare的关于rawQuery – 2010-04-20 14:15:46

3

这可能是矫枉过正,但您可以从表中选择一个行插入光标和使用Cursor.getColumnIndex([列名称作为字符串])。这将返回-1,如果它不存在。

+0

.....尼斯黑客建议..... – 2013-01-16 08:03:49

3

尝试使用PRAGMArawQuery()而不是query()

相关问题