当前位置:  开发笔记 > 数据库 > 正文

如何将值从Cocoa传递给SQLite查询

如何解决《如何将值从Cocoa传递给SQLite查询》经验,为你挑选了1个好方法。

首先请让我说我对客观的c开发很新.我正在为iphone编写一个供个人使用的小应用程序,但是在执行以下代码时遇到了一些问题:

NSString *sql = [[NSString alloc] initWithFormat:@"select color_r, color_g, color_b from Calendar where ROWID = %@", [calendarsID objectForKey:[arrayColors objectAtIndex:row]]];

sqlite3_stmt *selectstmt;

if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)

编译器告诉我,我从不兼容的指针类型传递sqlite3_prepare_v2的参数2.无论如何,程序会被编译并运行,但是当它必须执行我刚刚向您显示的代码时,它会产生错误.它表示查询中存在语法错误,语法错误仅在查询的最后部分.而不是:

从Calendar中选择color_,color_g,color_b,其中ROWID = 63(例如)

我在最后一个数字的位置得到了奇怪的字符(63).我想这是一个与字符串转换有关的问题.可以请任何人帮帮我吗?

非常感谢您的关注.阿莱西奥



1> Adam Rosenfi..:

问题是a NSString不是sqlite3_prepare_v2()第二个论点所期望的.它想要一个const char*.C在这里有点松懈,它允许你隐式地转换NSString*为a const char*,这是错误的 - 编译器给你一个你不应该忽略的警告.

你需要将其NSString转换为const char*.最简单的方法是使用-UTF8String消息将其转换为UTF-8:

//                              V---- HERE ----V
if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &selectstmt, NULL) == SQLITE_OK)

或者,在不太可能的情况下,您希望使用不同的编码,您可以使用该-cStringUsingEncoding:消息将字符串转换为使用特定字符编码的C字符串.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有