Meh*_*nce 2 sqlite objective-c
我的表和行如下所示;
Table : Visit
Column : VisitDate
Value : 634993344000000000
Run Code Online (Sandbox Code Playgroud)
VisitDate 列包含一个 Int64 值(例如 DateTime.Now.Ticks)
当我从数据库中读取此内容时,SQLite 无法检测列是否为 Int64 值。我的代码是;
switch (sqlite3_column_type(statement,i))
{
case SQLITE_INTEGER:
intValue = (int)sqlite3_column_int(statement, i);
colNameChar = (const char *)sqlite3_column_name(statement, i);
colName = [NSString stringWithCString:colNameChar encoding:NSUTF8StringEncoding];
colValue = [NSNumber numberWithInteger: intValue];
break;
case SQLITE_FLOAT:
dblValue = (double)sqlite3_column_double(statement, i);
colNameChar = (const char *)sqlite3_column_name(statement, i);
colName = [NSString stringWithCString:colNameChar encoding:NSUTF8StringEncoding];
colValue = [NSNumber numberWithDouble: dblValue];
break;
case SQLITE_TEXT:
strValue = (const char *)sqlite3_column_text(statement, i);
colNameChar = (const char *)sqlite3_column_name(statement, i);
colName = [NSString stringWithCString:colNameChar encoding:NSUTF8StringEncoding];
colValue = [NSString stringWithCString:strValue encoding:NSUTF8StringEncoding];
break;
case SQLITE_BLOB:
strValue = (const char *)sqlite3_column_value(statement, i);
colNameChar = (const char *)sqlite3_column_name(statement, i);
colName = [NSString stringWithCString:colNameChar encoding:NSUTF8StringEncoding];
colValue = [NSString stringWithCString:strValue encoding:NSUTF8StringEncoding];
break;
case SQLITE_NULL:
strValue = nil;
colNameChar = (const char *)sqlite3_column_name(statement, i);
colName = [NSString stringWithCString:colNameChar encoding:NSUTF8StringEncoding];
colValue = [[NSObject alloc] init];
break;
default:
strValue = (const char *)sqlite3_column_value(statement, i);
colNameChar = (const char *)sqlite3_column_name(statement, i);
colName = [NSString stringWithCString:colNameChar encoding:NSUTF8StringEncoding];
colValue = [NSString stringWithCString:strValue encoding:NSUTF8StringEncoding];
break;
}
Run Code Online (Sandbox Code Playgroud)
调试器输入大小写 SQLITE_INTEGER 并产生垃圾值(类似于 -2323423)。我怎样才能获得正确的价值?
在 SQLite 中,所有整数值都是 64 位值。使用它很常见,sqlite3_column_int因为大多数应用程序已经知道它们的值确实适合 32 位(或者从其他一些做出这种假设的应用程序复制粘贴了该代码)。
如果您想检查一个SQLITE_INTEGER值是否适合 32 位或 64 位,您必须先调用sqlite3_column_int64并检查结果。
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |