在Objective-C中调用sqlite3数据库时如何调用和转换int/NSNumber?

How to call and convert an int/NSNumber when calling on a sqlite3 database in Objective-C?

提前感谢您抽出时间阅读并希望对我有所帮助。我对编码比较陌生,我目前面临的问题是;

我建立了一个sqlite3数据库,三列分别存储为;字符串、浮点数和一个整数。在尝试读取和表示列时,我无法找到一种方法来表示 float 和 int 值。

存储在数据库中的三个属性设置为;

@property (nonatomic, strong) NSString *name;
@property (nonaomtic, strong) NSNumber *price;
@property (nonaomtic, strong) NSNumber *quantity;

我不确定将后两个属性更改为 float 和 int 是否会有所不同?

然而,我的主要困惑在于我为调用数据库而编写的以下代码;

-(void)readDataFromDatabase{
[self.stock removeAllObjects];

sqlite3 *database;

if (sqlite_open([self.databasePath UTF8String], &database) == SQLITE_OK) {
   char *sqlStatement = "select * from entries";
   sqlite3_stmt *compiledStatement;

if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK){
   while(sqlite3_step(compiledStatement) == SQLITE_ROW{
      char *n = sqlite3_column_text(compiledStatement, 1);
      char *p = sqlite3_column_int(compiledStatement, 2);
      chat *q = sqlite3_column_int(compiledStatement, 3);

      NSString *name = [NSString stringWithUTF8String:n];
      NSNumber *price = [NSString stringWithUTF8String:p];
      NSNumber *quantity = [NSString stringWithUTF8String:q];

      Data *data = [[Data alloc] initWithData:name thePrice: price theQuantity:quantity];
      [self.stock addObject:data];
    }
  }
  sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}

常识告诉我问题出在这一段;

NSString *name = [NSString stringWithUTF8String:n];
NSNumber *price = [NSString stringWithUTF8String:p];
NSNumber *quantity = [NSString stringWithUTF8String:q];

我不确定应该如何处理 NSNumber?我知道 NSString stringWithUTF8String 不正确,但我不知道 NSNumber 的等价物。

我非常感谢任何关于此事的见解和帮助。

谢谢!

您在 floatint 中提到的内容是正确的。 Float 不需要像 NSString 那样引用,因为它的大小在 32 位和 64 位系统之间没有变化。如果您的整数较大,那么我建议使用 NSInteger 作为该值:

char *n = sqlite3_column_text(compiledStatement, 1);
float p = sqlite3_column_text(compiledStatement, 2);
int q = sqlite3_column_text(compiledStatement, 3);

NSString *name = [NSString stringWithUTF8String:n];
float price = p;
NSInteger quantity = q;

注意:对于 float 或 int 值,您不需要 *,因为它们不是指针。

您甚至可以这样做(如果您已经在 header 中声明属性):

name = [NSString stringWithUTF8String:sqlite3_column_text(compiledStatement, 1)];
price = sqlite3_column_text(compiledStatement, 2);
quantity = sqlite3_column_text(compiledStatement, 3);

要检查您可以使用的值 NSLog:

NSLog(@"%@ %.02f %li", name, price, quantity);

为了完整起见,如果您想将 floatint 变成 NSNumber

NSString *name = [NSString stringWithUTF8String:n];
NSNumber *price = [NSNumber numberWithFloat:p];
NSNumber *quantity = [NSNumber numberWithInt:q];

在您的 header 中声明的属性:

name = [NSString stringWithUTF8String:n];
value = [NSNumber numberWithFloat:p];
quantity = [NSNumber numberWithInt:q];

NSLog(@"%@ %@.02f %@", name, price, quantity);

有多种方法可以获得结果,这就是 Objective-C 非常灵活的原因。