0

我已经建立了我的 sqlite 数据库,并在应用程序启动时复制。之后我当然会运行查询(只是选择语句)。到目前为止,除了一个查询之外的所有查询都有效。经过一番调查,似乎带有空格的 charNames 是如何得到“?”的。在空格所在的位置添加。所以我有“Hello?World”而不是“Hello world”。无论出于何种原因,这似乎使我的字符串等于null。

NSString *querySQL = [NSString stringWithFormat: @"select moveName, moveCommand, moveStance, moveHits, moveType, moveDmg, moveHitRange, moveEscape, moveProperties from Moves where charName='%@' and moveCatagory = '%@';",charName, catName];
        
        NSLog(@"move SQL query: %@",querySQL);
        
        const char *query_stmt = [querySQL UTF8String];
        
        if (sqlite3_prepare_v2(myDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW)
            {
                const char* moveName = (const char*)sqlite3_column_text(statement, 0);
                const char* moveCommand = (const char*)sqlite3_column_text(statement, 1);
                const char* moveStance = (const char*)sqlite3_column_text(statement, 2);
                const char* moveHits = (const char*)sqlite3_column_text(statement, 3);
                const char* moveType = (const char*)sqlite3_column_text(statement, 4);
                const char* moveDmg = (const char*)sqlite3_column_text(statement, 5);
                const char* moveHitRange = (const char*)sqlite3_column_text(statement, 6);
                const char* moveEscape = (const char*)sqlite3_column_text(statement, 7);
                const char* moveProperties = (const char*)sqlite3_column_text(statement, 8);
                
                Move * move = [[Move alloc]init];
                
                if (moveName != nil) {  
                    move.moveName = [[NSString alloc] initWithUTF8String:moveName]; 
                    NSLog(@"moveName %@",move.moveName);
                }

等...为每个查询的字段复制

这将适用于除了 moveName 之外的所有查询字段。这些移动行中的每一个都有一个标题字段(通常没有空格),并且该标题每次都出现,但其余行有空格并且那些作为空值出现。

控制台输出:

2012-05-04 10:35:11.886 我的 Movelist [2938:f803] moveName Jab

2012-05-04 10:35:11.891 我的 Movelist [2938:f803] moveName (null)

2012-05-04 10:35:11.895 我的 Movelist [2938:f803] moveName (null)

终端 sqlite3 的输出:

刺|1||||8|h||

前锋?Jab|f+1||||8|h||

向下?Jab|d/b+1|RC|||6|s||

仅供参考:为简单起见,我省略了其他字段,因为它们似乎工作正常。就像我说的,我认为这与似乎只在名称字段中的空格有关。

4

1 回答 1

0

您正在查看不良数据。? _ 实际上是 � 或 �应该能够通过 REPLACE 函数在您的 SQL 中将其替换为您想要的正常空间。null可能是字符不兼容 UTF8 的结果。

请参阅此链接或此帖子以获取更多信息。

于 2012-05-04T19:22:21.173 回答