代码之家  ›  专栏  ›  技术社区  ›  pgsandstrom

在android/sqlite中检测表是否包含列

  •  4
  • pgsandstrom  · 技术社区  · 14 年前

    所以我有一个应用程序在市场上,与更新,我想添加一些列到数据库。到目前为止没有问题。但是我想检测正在使用的数据库是否缺少这些列,如果是这样,就添加它们。我需要动态地完成这项工作,而不仅仅是在更新到新版本之后,因为应用程序应该仍然能够导入旧的数据库。通常我可以用 PRAGMA 查询,但我不知道如何做到这一点与安卓。我不能使用execsql,因为它是一个查询,我也不知道如何在query()函数中使用pragma。

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

    干杯,

    4 回复  |  直到 14 年前
        1
  •  12
  •   Brad Hein    14 年前

    pragma管用。作为一个例子,我刚刚在我的一个android应用程序dbs上尝试过。

    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
    

    如我们所见,在指定的表中有三个字段。标识、说明和消息。

    因此,在你的应用程序中,使用如下内容:

    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. 
    

    请原谅格式不好。

        2
  •  3
  •   Rich    14 年前

    这可能有点过头了,但是您可以从表中选择一行作为游标并使用cursor.getColumnIndex([列名为字符串])。如果不存在,则返回-1。

        3
  •  3
  •   CommonsWare    14 年前

    试用使用 PRAGMA 具有 rawQuery() 而不是 query() .

        4
  •  0
  •   My Other Me    14 年前

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

    pragma table_info(table_name);
    

    编辑: 我从来没有在安卓系统上做过,但我觉得应该可以