2

我们可以通过从Sqlite3数据库的行中知道列名及其数据类型来获取Column的值吗?

for (int i=0; i<sqlite3_column_count(selectStatement); i++)                 
    {
        int intValue = 0;
        const char *strValue;
        switch (sqlite3_column_type(selectStatement,i)) 
        {
        }

}

我正在尝试这个,但我需要来自列名和数据类型的值。

在上述方法中,我们迭代所有列并比较类型。有什么我可以通过为动态查询系统指定数据类型和列名直接获取值的吗?

Android等效代码,我在全局范围内拥有游标对象并且工作正常:

 public Object get(String name, QueryDbType type) throws Exception {
        Object retult = null;
        int index = cursor.getColumnIndex(name);
        switch (type) {
        case Text:
            retult = cursor.getString(index);
            break;
        case Int:
            retult = cursor.getInt(index);
            break;

        default:
            retult = cursor.getString(index);
            break;
        }
        return retult;
    }
4

2 回答 2

4

AFAIU,您无法获取列名-> 索引映射。您将不得不手动进行。如果您有很多字段,那么您可以构建一个地图/字典,例如(伪代码):

for (int i=0; i<sqlite3_column_count(selectStatement); i++) {
    name = sqlite3_column_name(i);
    // add name to the dictionary 
    dict[name] = i;
}

然后您可以按名称查询字典以获取列索引,并使用它可以获取值。

如果您没有很多字段,那么您也可以循环并找到索引。

于 2013-10-25T11:51:40.957 回答
0

只需为您想要的数据类型调用sqlite3_column_*函数;如有必要,SQLite 会自动将列值转换为该类型。

于 2013-10-25T11:25:48.667 回答