在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 的等价物。
我非常感谢任何关于此事的见解和帮助。
谢谢!
您在 float
和 int
中提到的内容是正确的。 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);
为了完整起见,如果您想将 float
和 int
变成 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 非常灵活的原因。
提前感谢您抽出时间阅读并希望对我有所帮助。我对编码比较陌生,我目前面临的问题是;
我建立了一个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 的等价物。
我非常感谢任何关于此事的见解和帮助。
谢谢!
您在 float
和 int
中提到的内容是正确的。 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);
为了完整起见,如果您想将 float
和 int
变成 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 非常灵活的原因。