2016-03-15 126 views
0
for (int i=0; i< sqlite3_column_count(selectStatement); i++)      
{ 

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

} 

如何从SQLITE3分贝如何从sqlite3的DB的行获得列数据类型 - 目标C

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; 
} 
+0

不容易; Java是面向对象的,并且有一个很好集成的sqlite3包装器。基本的sqlite3 API是C和C不是面向对象的。因此,你正在寻找一个'union'或类似的东西,但是你怎么不知道列类型? – trojanfoe

+0

'sqlite3_column_type()'已经做了你想要的。问题是什么? –

+0

他希望C变体机制捕获列值。 – trojanfoe

回答

0

SQLite是“无类型的”。这意味着您可以将任何类型的数据存储在任何表的任何列中,而不管该列的声明数据类型如何。你可以找到更多的信息here.

但是,如果你想获得关于列的声明数据类型的信息,你可以通过使用pragma table_info(table_name)来实现。

例如。

pragma table_info(Setting); 

然后,您可以遍历返回的结果集并检查要检查的数据类型。