2 daffodilgirl DaffodilGirl 于 2013.01.29 14:36 提问

sqlite sqlite3_column_text返回变量

sqlite声明:

NSString *queryString = @"SELECT email.pk, email.sender_name, email.sender_address, search_email.subject, email.datetime, "
"LENGTH(email.attachments), SUBSTR(search_email.body,0,150), email.folder_num, t.threadid, t.numThreads FROM "
"email, search_email ,(select  threadid, min( docid) as docid, count(*) as numThreads from search_email group by threadid) as t       "
"WHERE t.docid = email.pk AND (email.folder_num = ? OR email.folder_num_1 = ? OR email.folder_num_2 = ? OR email.folder_num_3 = ?) AND email.pk = search_email.docid "
"ORDER BY email.datetime DESC;";

我用 sqlite3_column_text和sqlite3_column_int获取的值都正确,但是在threadid处出现问题:

NSString* temp = @"";
const char *sqlVal = (const char *)sqlite3_column_text(folderSearchStmt, 1);

...
temp = @"";
sqlVal = (const char *)sqlite3_column_text(folderSearchStmt, 8);
if(sqlVal != nil)
    temp = [NSString stringWithUTF8String:sqlVal];
[res setObject:temp forKey:@"threadID"];

如果我在aslVal加一个断点,返回sqlVal = (const char*) 0x266c0a30 "1-87",但是随后temp返回(__NSCFString*)0x27f7bff0 @<variable is not NSString>

1个回答

redCoral_
redCoral_   2013.01.29 15:53
已采纳

需要拒绝无效的条目,如下:

      const char *_abc = (char *) sqlite3_column_text(statement, 1);  

   NSString *_abcTemp;

      if (_abc)
          _abcTemp = _abc == NULL ? nil : [[NSString alloc] initWithUTF8String:_abc];
     else 
        _abcTemp = [[NSString alloc] initWithString:@"Not a valid string"];  
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
sqlite3_column
这个过程从执行sqlite3_step()执行一个准备语句得到的结果集的当前行中返回一个列。每次sqlite3_step得到一个结果集的列停下后,这个过程就可以被多次调用去查询这个行的各列的值。对列操作是有多个函数,均以sqlite3_column为前缀 const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); int sqlite3_
SQLite读取中文的方案
由于SQLite3支持UTF-16,所以创建数据的时候编码方案选择UTF16而不是UTF8。 创建表然后添加数据使用下面的代码即可读出中文。他是visual studio  2008 创建智能设备程序在windows ce 5.0下测试ok! sqlite3* db; sqlite3_stmt *stat; const unsigned char* ctemp; const un
数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text,
数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text....
"_sqlite3_column_type",referenced from
一,说明 在接收旧项目时,报错如下: 二:解决方法(缺少文件,添加libsqlite3.0.tbd)
MFC中SQLite数据库的使用
1打开数据库 BOOL playDlg::openData() {  WCHAR a[100];  CString path;  path = m_exePath+L"sentence_making\\FROG.db";  memcpy(a,path,sizeof(a));  int nRet = sqlite3_open16((const char *)a,&pSQLite);  
QSQLITE中文乱码问题解决方法
>>>>>>>尊重版权,转载请注明文章出处。 在网上搜罗QSQLITE中文乱码问题的解决方法,都是说通过QTextCodec调用setCodecForCStrings显式设定编码来解决,不知道他们有没有亲自尝试,还是他们的使用环境与我不同,我都一一尝试无一成功。最后通过查看Qt关于QSQlite的源码终于让我解决自己遇到的问题。 首先说一下,我遇到QSQLITE中文乱码问题产生的原因。
sqlite获取 sqlite3_step 结果中的某列的值
首先执行 sqlite3_prepare_v2 再执行 sqlite3_step 然后 ----------------------------------------------------------------------------------- 这个过程从执行sqlite3_step()执行一个准备语句得到的结果集的当前行中返回一个列。每次sqlite3_step得到一个结果
sqlite3中绑定bind函数用法 (将变量插入到字段中)
例程: #include #include #include #include static sqlite3 *db; int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i    printf("%s = %s\n", azColName[i], ar
sqlite sqlite3_bind_int sqlite3_bind_text
sqlite3_bind_int   sqlite3_bind_text 这两个函数给“准备语句”绑定参数。其中函数的第二个参数是字段的编号。 此编号是从1开始,而不是从0开始。 查看sqlite3的源码,可以看到这两个函数都调用了 vdbeUnbind 函数。 查看vdbeUnbind函数,在这个函数中有以下几句 if( i p->nVar){       sqlite3E
解决 android 下sqlite3_column_table_name 编译不过的问题
在coco undefined reference to 'sqlite3_column_table_name'