使用SQLite for iPhone从数据库获取字符串
我有一个教程中的代码。我想知道如何修改它,使它从数据库中读取的不是一个double,而是一个字符串使用SQLite for iPhone从数据库获取字符串,iphone,sqlite,Iphone,Sqlite,我有一个教程中的代码。我想知道如何修改它,使它从数据库中读取的不是一个double,而是一个字符串 if(detailStmt == nil) { const char *sql = "Select price from Coffee Where CoffeeID = ?"; if(sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) != SQLITE_OK) NSAssert1(0, @"Er
if(detailStmt == nil) {
const char *sql = "Select price from Coffee Where CoffeeID = ?";
if(sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(database));
}
sqlite3_bind_int(detailStmt, 1, coffeeID);
if(SQLITE_DONE != sqlite3_step(detailStmt)) {
//Get the price in a temporary variable.
NSDecimalNumber *priceDN = [[NSDecimalNumber alloc] initWithDouble:sqlite3_column_double(detailStmt, 0)];
//Assign the price. The price value will be copied, since the property is declared with "copy" attribute.
self.price = priceDN;
//Release the temporary variable. Since we created it using alloc, we have own it.
[priceDN release];
}
我很确定需要修改的行是:
sqlite3_bind_int(detailStmt, 1, coffeeID);
NSDecimalNumber *priceDN = [[NSDecimalNumber alloc] initWithDouble:sqlite3_column_double(detailStmt, 0)];
我需要使用sqlite3_bind_text和sqlite3_column_text,但我不确定如何正确更改参数
提前感谢您的帮助 ==新的更新答案== 我使用SQLLite的方式与您的略有不同。我从未使用过
sqlite3\u bind\u text
我的建议是用我提供的代码段替换您的代码段。我试图让它涵盖你的全部代码。它可能需要调整一两次
下面的解决方案应该适用于所有字段和行。您只需要使用适当的sqlite3\u column\u text
,sqlite3\u column\u double
,sqlite3\u column\u int
或在while(sqlite3\u step(detailStmt)=SQLITE\u ROW)循环中可能需要的其他类型。如果只需要第一行,则可以将while循环更改为If(sqlite3\u步骤(detailStmt)=SQLITE\u行)
==新的更新答案==
我使用SQLLite的方式与您的略有不同。我从未使用过sqlite3\u bind\u text
我的建议是用我提供的代码段替换您的代码段。我试图让它涵盖你的全部代码。它可能需要调整一两次
下面的解决方案应该适用于所有字段和行。您只需要使用适当的sqlite3\u column\u text
,sqlite3\u column\u double
,sqlite3\u column\u int
或在while(sqlite3\u step(detailStmt)=SQLITE\u ROW)循环中可能需要的其他类型。如果只需要第一行,则可以将while循环更改为If(sqlite3\u步骤(detailStmt)=SQLITE\u行)
刚刚意识到。。。编译的声明来自哪里?非常感谢您的耐心,德福!因此,我现在使用的是您代码的更新版本。(除了我必须将所有内容都放在第一个if语句中,因为否则它在prepare语句中无法识别sql。视图现在已加载!但我仍然有一个问题,因为它只对它应该检索的字符串表示null。我放入了一个NSLOG语句,发现它甚至没有进入while循环。您还有其他问题吗出了什么问题?我真的没有这方面的经验,我只是想把它用于一个项目。刚刚弄明白!非常感谢你的帮助!刚刚意识到…compiledStatement从何而来?非常感谢你的耐心,dredful!所以我现在使用你的代码的更新版本。(除了我必须将所有内容都放在第一个if语句中,因为否则它在prepare语句中无法识别sql。视图现在已加载!但我仍然有一个问题,因为它只对它应该检索的字符串表示null。我放入了一个NSLOG语句,发现它甚至没有进入while循环。您还有其他问题吗出了什么问题?我真的没有这方面的任何经验,我只是想把它用于一个项目。刚刚想出来!非常感谢你的帮助!
if(detailStmt == nil) {
const char *sql = "Select threadtxt from Coffee Where CoffeeID = ?";
}
if (sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) == SQLITE_OK)
{
// loop through the results and add them to the array
while(sqlite3_step(detailStmt) == SQLITE_ROW)
{
// read the data from the result row
NSString *nameString = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
self.threadtxt = nameString;
}
} else {
NSAssert1(0, @"Error while getting the price of coffee. '%s'", sqlite3_errmsg(database));
}
// Release the compiled statement from memory
sqlite3_finalize(detailStmt);