Objective c 如何从sqlite数据库读取Int64值?
我的桌子和行如下所示Objective c 如何从sqlite数据库读取Int64值?,objective-c,sqlite,Objective C,Sqlite,我的桌子和行如下所示 Table : Visit Column : VisitDate Value : 634993344000000000 VisitDate列包含Int64值(例如DateTime.Now.Ticks) 当我从数据库中读取时,SQLite无法检测列是否为Int64值。 我的代码是 switch (sqlite3_column_type(statement,i)) { case SQLITE_INTEGER: i
Table : Visit
Column : VisitDate
Value : 634993344000000000
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;
}
调试器输入SQLITE_INTEGER的大小写,并生成一个垃圾值(类似于-2323423)。
如何获得正确的值?在SQLite中,所有整数值都是64位值。
通常使用sqlite3\u column\u int
,这只是因为大多数应用程序已经知道它们的值适合32位(或者已经从做出此假设的其他应用程序复制了该代码)
如果要检查
SQLITE\u INTEGER
值是否适合32位或64位,必须首先调用sqlite3\u column\u int64
并检查结果。intValue=(int)sqlite3\u column\u int(语句,i)
-您确定平台上的int
是64位吗?否,intValue=(int)sqlite3\u column\u int(语句,i)
此假设不正确。我知道如何阅读它(longValue=(long)sqlite3\u column\u int64(语句,I);
)。但是问题是,sqlite\u column\u type
无法检测到值为int或int64(long)。它没有任何帮助。那么,在这种情况下,它应该是什么呢?