Objective c 目标C:如何读取sqlite3 GUID字段(iOS)

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可以读取的类型 编辑:我最

为了记录在案,我正在iPhone和iPad上创建一个iOS应用程序

以下是我的问题的设置:

我有一个无法更改的sqlite db。此数据库具有GUID类型的id字段。现在,我知道sqlite没有实际的GUID类型,这很好。这些值是使用我可以访问的哈希创建的。sqlite db是使用我无权访问的转换器从SQL Server db创建的。我希望避免使用哈希来重新创建guid,我可以这样做

这本质上是我的问题:是否有一种本机方法可以将guid列类型解码为Objective-c可以读取的类型

编辑:我最初使用sqlite3_column_text提取值,并将值显示为亚洲字符。我将其更新为下面的代码,但翻译给我的guid值不正确:

        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字段,但我认为包装器存储的是字节,而不是字符串。