gpt4 book ai didi

objective-c - 如何将值从 Cocoa 传递到 SQLite 查询

转载 作者:行者123 更新时间:2023-12-03 17:28:43 26 4
gpt4 key购买 nike

首先请允许我说我对 Objective 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。无论如何,该程序都会被编译并运行,但是当它必须执行我刚刚向您展示的代码时,它会产生错误。它说查询中有语法错误,语法错误就在查询的最后部分。而不是:

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

我在最后一个数字 (63) 的位置出现了奇怪的字符。我猜这是一个与字符串转换有关的问题。有人可以帮助我吗?

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

最佳答案

问题是 NSString 不是 sqlite3_prepare_v2() 所期望的第二个参数。它需要一个const char*。 C 在这里有点宽松,它允许你隐式地将 NSString* 转换为 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 字符串的消息。

关于objective-c - 如何将值从 Cocoa 传递到 SQLite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1857204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com