gpt4 book ai didi

objective-c - 如何从 sqlite 数据库中读取 Int64 值?

转载 作者:行者123 更新时间:2023-12-03 15:11:36 25 4
gpt4 key购买 nike

我的表格和行如下所示;

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 的 case 并产生一个垃圾值(类似于 -2323423)。
我怎样才能得到正确的值(value)?

最佳答案

在 SQLite 中,所有整数值都是 64 位值。
常用sqlite3_column_int只是因为大多数应用程序已经知道它们的值确实适合 32 位(或者已经从做出此假设的其他应用程序中复制粘贴了该代码)。

如果要检查 SQLITE_INTEGER 是否值将适合 32 或 64 位,您必须调用 sqlite3_column_int64首先检查结果。

关于objective-c - 如何从 sqlite 数据库中读取 Int64 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17858652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com