Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode,iPhone上非常奇怪的SQLite SQL选择类问题_Iphone_Sqlite_Select - Fatal编程技术网

Xcode,iPhone上非常奇怪的SQLite SQL选择类问题

Xcode,iPhone上非常奇怪的SQLite SQL选择类问题,iphone,sqlite,select,Iphone,Sqlite,Select,我已经为我的iPhone制作了一个SQLite应用程序。 当我在iMac上放置的SQLite DB上测试SELECT时,一切正常,但在iPhone上,我没有返回任何行 SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM423%' LIMIT 200 现在是奇怪的部

我已经为我的iPhone制作了一个SQLite应用程序。 当我在iMac上放置的SQLite DB上测试SELECT时,一切正常,但在iPhone上,我没有返回任何行

SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM423%' LIMIT 200
现在是奇怪的部分 当我在iPhone上使用下面的select时,会返回一条带有SAP_PART_NRAWM42300V的记录

SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM42%' LIMIT 200
在iMac上测试时,这两个选项都会返回一行(它们应该返回)

这是iPhone/SQlite上的某种bug吗

我想不出来……我的头发都变白了-(

非工作代码(未选择行) 已选择工作代码1行
+(void)getInitialDataToDisplay:(NSString*)dbPath{
AppDelegate*AppDelegate=(AppDelegate*)[[UIApplication sharedApplication]委托];
sqlite3_stmt*selectstmt=NULL;
if(sqlite3_打开([dbPath UTF8String],&database)==SQLITE_确定){
const char*sql=“从SAP零件号为“%AWM4230%”的组件中选择ID、SAP零件号、SAP描述、MOQ、INC、NLT、折扣代码、AD欧元、AD美元、OEM欧元、OEM美元”;
if(sqlite3\u prepare\u v2(数据库,sql,-1,&selectstmt,NULL)==SQLITE\u确定){
while(sqlite3\u步骤(selectstmt)=SQLITE\u行){
NSInteger primaryKey=sqlite3\u column\u int(selectstmt,0);
数据库*DatabaseObj=[[Database alloc]initWithPrimaryKey:primaryKey];
DatabaseObj.sapart=[NSString stringWithUTF8String:(char*)sqlite3\u column\u text(selectstmt,1)];
DatabaseObj.sapDesc=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,2)];
DatabaseObj.sapMOQ=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,3)];
DatabaseObj.sapINC=[NSString stringWithUTF8String:(char*)sqlite3\u column\u text(selectstmt,4)];
DatabaseObj.sapNLT=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,5)];
DatabaseObj.sapDISCOUNT=[NSString stringWithUTF8String:(char*)sqlite3_column_text(selectstmt,6)];
//价格
DatabaseObj.oemEURO=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,7)];
DatabaseObj.oemUSD=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,8)];
DatabaseObj.adEURO=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,9)];
DatabaseObj.adUSD=[nsstringwithutf8string:(char*)sqlite3\u column\u text(selectstmt,10)];
[appDelegate.compArray addObject:DatabaseObj];
}
}
}
其他的
sqlite3_close(database);//即使open调用失败,也要关闭数据库连接以释放所有内存。
sqlite3_重置(选择STMT);
}

已解决-查看注释。我仍然无法100%确定这是为什么/如何解决的。

请发布您用于查询数据库并在iPhone应用程序上迭代行的代码?我会用一些不太复杂的东西来测试它,例如文字字符串。如果这在iMac和iPhone/iOS上都有效,那么这就是c条件。我在iPhone和在返回时强制转换某些数据类型方面也遇到了问题,因此,如果您可以调试结果行计数,这可能有助于缩小其范围。正如我在上文中所解释的,我已经尝试使用相同的结果生成文本字符串(请参阅第一个选择字符串).我不确定如何/在哪里调试-当我调试SQL字符串时,一切似乎都正常,但我无法调试“已编译的选择字符串”?有什么想法吗?非常奇怪…我尝试了一些事情。如果我在第一次打开数据库时使用选择,它工作正常,但另一个没有让任何人看到区别/问题?
-(void) searchDB:(NSString *)strSearch {

    NSString *wildcardSearch = [NSString stringWithFormat:@"%%%@%%", strSearch];

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    if(searchSTMT == nil) {
       const char *sql = "SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM4230%'";
        if(sqlite3_prepare_v2(database, sql, -1, &searchSTMT, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating view statement. '%s'", sqlite3_errmsg(database));
    }

    if(SQLITE_DONE != sqlite3_step(searchSTMT)) {

        while(sqlite3_step(searchSTMT) == SQLITE_ROW) {

            NSInteger primaryKey = sqlite3_column_int(searchSTMT, 0);
            Database *DatabaseObj = [[Database alloc] initWithPrimaryKey:primaryKey];
            DatabaseObj.sapPart = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 1)];
            DatabaseObj.sapDesc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 2)];
            DatabaseObj.sapMOQ = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 3)];                
            DatabaseObj.sapINC = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 4)];                 
            DatabaseObj.sapNLT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 5)];
            DatabaseObj.sapDISCOUNT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 6)]; 

            DatabaseObj.oemEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 7)];
            DatabaseObj.oemUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 8)];    
            DatabaseObj.adEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 9)];         
            DatabaseObj.adUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 10)];                        

            [appDelegate.compArray addObject:DatabaseObj];
        }
    }
    else 
        NSAssert1(0, @"Error while getting the rows. '%s'", sqlite3_errmsg(database));

    //Reset the detail statement.
    sqlite3_reset(searchSTMT);

}
+ (void) getInitialDataToDisplay:(NSString *)dbPath {<p>
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    sqlite3_stmt *selectstmt = NULL;

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

       const char *sql = "SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM4230%'";

        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                Database *DatabaseObj = [[Database alloc] initWithPrimaryKey:primaryKey];
                DatabaseObj.sapPart = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                DatabaseObj.sapDesc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
                DatabaseObj.sapMOQ = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];                
                DatabaseObj.sapINC = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];                 
                DatabaseObj.sapNLT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 5)];
                DatabaseObj.sapDISCOUNT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 6)]; 
                //PRICES
                DatabaseObj.oemEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 7)]; 
                DatabaseObj.oemUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 8)];    
                DatabaseObj.adEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 9)];         
                DatabaseObj.adUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 10)];                      

                [appDelegate.compArray addObject:DatabaseObj];
            }
        }
    }
    else
        sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.

    sqlite3_reset(selectstmt);
}