在双引号转义表名

时间:2017-06-03 05:56:49

标签: android sqlite android-sqlite

我有一张表格,其名称用双引号转义("表")
它有一个也用双引号转义的列(" 03/06 / 17")

当我做表信息pragma

table = "\"Table\"";
column = "\"03/06/17\"";
Cursor res = mDB.rawQuery("PRAGMA table_info("+table+")",null);
int value = res.getColumnIndex(column);

if(value == -1)
{
    isExist = false;
}

总是返回-1。

但是当我执行普通查询时,我得到了列。

    table = "\"Table\"";
    column = "03/06/17";
    Cursor cursor = mDB.query(table,null,
            null,null,null,null,null);
    int colIndex = 0;
    int colCount = cursor.getColumnCount();
    cursor.moveToFirst();
    while(colCount-- != 0) {

        if(column.equals(cursor.getColumnName(colIndex)))
            return true;

        colIndex++;
    }

该列是使用

创建的
    table = "\"Table\"";
    column = "\"03/06/17\"";
    final String DB_ADD_COLUMN_STATEMENT_TABLE_SHOP_NAME =
                "ALTER TABLE "+ table + " ADD COLUMN "+ column + " FLOAT";
    mDB.execSQL(DB_ADD_COLUMN_STATEMENT_TABLE_SHOP_NAME);

1 个答案:

答案 0 :(得分:2)

您在table_info PRAGMA返回的数据中没有指定列。游标中的每一行代表表中的一列,请查看示例数据,table_info命令返回表create table one(id, field1, field2 text, field3 unique);

cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           id                      0                       0         
1           field1                  0                       0         
2           field2      text        0                       0         
3           field3                  0                       0         

因此,如果您要查找名称为03/06/17的列的详细信息,则需要枚举游标并检查其name值是否等于03/06/17