My table and row look like below;
Table : Visit
Column : VisitDate
Value : 634993344000000000
VisitDate column holds an Int64 value (such as DateTime.Now.Ticks)
while I am reading this from database, SQLite cannot detect whether column is Int64 value. My code is;
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;
}
Debugger enters case of SQLITE_INTEGER and produces a garbage value (something like -2323423). How can I get correct value?
In SQLite, all integer values are 64-bit values.
It is common to use sqlite3_column_int only because most applications already know that their values do fit into 32 bits (or have copy-pasta'd that code from some other application that made this assumption).
If you want to check whether a SQLITE_INTEGER value will fit into 32 or 64 bits, you have to call sqlite3_column_int64 first and check the result.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With