Objective c 目标C:如何读取sqlite3 GUID字段(iOS)
为了记录在案,我正在iPhone和iPad上创建一个iOS应用程序 以下是我的问题的设置: 我有一个无法更改的sqlite db。此数据库具有GUID类型的id字段。现在,我知道sqlite没有实际的GUID类型,这很好。这些值是使用我可以访问的哈希创建的。sqlite db是使用我无权访问的转换器从SQL Server db创建的。我希望避免使用哈希来重新创建guid,我可以这样做 这本质上是我的问题:是否有一种本机方法可以将guid列类型解码为Objective-c可以读取的类型 编辑:我最初使用sqlite3_column_text提取值,并将值显示为亚洲字符。我将其更新为下面的代码,但翻译给我的guid值不正确:Objective c 目标C:如何读取sqlite3 GUID字段(iOS),objective-c,cocoa-touch,ios,sqlite,guid,Objective C,Cocoa Touch,Ios,Sqlite,Guid,为了记录在案,我正在iPhone和iPad上创建一个iOS应用程序 以下是我的问题的设置: 我有一个无法更改的sqlite db。此数据库具有GUID类型的id字段。现在,我知道sqlite没有实际的GUID类型,这很好。这些值是使用我可以访问的哈希创建的。sqlite db是使用我无权访问的转换器从SQL Server db创建的。我希望避免使用哈希来重新创建guid,我可以这样做 这本质上是我的问题:是否有一种本机方法可以将guid列类型解码为Objective-c可以读取的类型 编辑:我最
NSString* query = [NSString stringWithFormat:
@"select CcoDrugPage.Id, CcoDrugPage.Title, DetailText.Text "
"from CcoDrugPage inner join DetailText on CcoDrugPage.TextId = DetailText.Id "
"where CcoDrugPage.DrugName = '%@' and PrototypeSuffix like 'Drug%%' "
"order by SortOrder "
"limit %i "
, self.title, initial ? 2 : 100];
sqlite3_stmt* statement;
if(sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
int i = 0;
while(sqlite3_step(statement) == SQLITE_ROW) {
DrugSection* section = [[[DrugSection alloc] init] autorelease];
char* rowData = (char*)sqlite3_column_text(statement, 0);
CFUUIDRef uuidObj = CFUUIDCreateWithBytes(nil,
rowData[0],
rowData[1],
rowData[2],
rowData[3],
rowData[4],
rowData[5],
rowData[6],
rowData[7],
rowData[8],
rowData[9],
rowData[10],
rowData[11],
rowData[12],
rowData[13],
rowData[14],
rowData[15]);
section.pageID = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
rowData = (char*)sqlite3_column_text(statement, 1);
NSString* sectionTitle = [NSString stringWithUTF8String:rowData];
rowData = (char*)sqlite3_column_text(statement, 2);
NSString* sectionText = [NSString stringWithUTF8String:rowData];
这里的问题似乎是由于转换后的SQLite数据库中的实际GUID字段已损坏。字段中转换的十六进制值包含59个字符,我们都知道如果不包含大括号和破折号,guid最多包含32个字符
我让客户端将字段转换为播放文本来解决问题。在DB中,它看起来像随机的亚洲字符。但我可以在十六进制编辑器中查看它,它看起来像你发布的字符串。问题是,当我使用sqlite3.h将其拉出时,我只使用sqlite3\u column\u text获取随机的亚洲字符。我编辑了我的帖子,以包含我当前用于提取guid值的代码行,其中我将每个字节分别转换为CFUUID,但得到的值不正确。嗯,当我查看实际的DB时,该列看起来像一堆随机字符。当我使用NSLog@rowData=%@,[NSString stringWithUTF8String:rowData];,我返回rowData=댊鑵媋Ӻ痹쩿ꃪ쾢. 据我所知,sql server数据库和sqlite数据库中的数据是匹配的,因此我相信它存储正确。创建原始数据库时,使用了一个C sqlite包装器,因此GUID对象直接传递给包装器。显然,sqlite没有GUID字段,但我认为包装器存储的是字节,而不是字符串。