【问题标题】:How to get column value by suplying column name and datatype from a row of Sqlite3 db - Objective C如何通过从一行 Sqlite3 db 中提供列名和数据类型来获取列值 - Objective C
【发布时间】:2013-10-25 19:51:40
【问题描述】:

我们可以通过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;
    }

【问题讨论】:

  • 我不明白问题出在哪里;您知道结果中的哪一列,因为您可以在SELECT 语句中指定要获取的列,并且您知道数据类型是什么,因为它是模式的一部分。除非您正在创建某种动态查询系统?
  • @trojanfoe - 是的,它用于动态查询系统
  • 好的,那么您使用的是SELECT * FROM 还是SELECT name, name, name FROM
  • 只有我需要执行。我将获得查询、列名和列数据类型。我需要发送这些的所有结果值。我只会得到 SELECT * FROM。我们可以在 android sqlite 中实现相同的功能。所以我问的是我们也可以在 ios 中实现。
  • @trojanfoe - 更新了我的问题,请检查。

标签: ios objective-c sqlite


【解决方案1】:

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

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

然后你可以通过名称查询字典得到列索引,并使用它可以得到值。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复。我也不知道列索引。这也适用吗?
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2023-02-02
    • 2018-02-07
    • 2023-01-09
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多