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
Iphone SQLItemManager的更新问题_Iphone_Ios_Ipad_Sqlite - Fatal编程技术网

Iphone SQLItemManager的更新问题

Iphone SQLItemManager的更新问题,iphone,ios,ipad,sqlite,Iphone,Ios,Ipad,Sqlite,我无法进行更新,但插入和选择工作正常 注: 1) 我使用的包装器来自: 2) 相同的代码适用于INSERT语句,但不适用于update //NSString* sqlStr = (@"INSERT INTO sbu (sbuName) VALUES ( 'rrrr' );)"); //WORKS 3) 代码如下: 与此更新关联的代码如下所示: 我的内联代码 NSString* sqlStr = (@"UPDATE User SET Name = 'wweerr' WHERE Id =

我无法进行更新,但插入和选择工作正常

注:

1) 我使用的包装器来自:

2) 相同的代码适用于INSERT语句,但不适用于update

//NSString* sqlStr = (@"INSERT INTO sbu (sbuName) VALUES ( 'rrrr' );)"); //WORKS
3) 代码如下:

与此更新关联的代码如下所示:

我的内联代码

    NSString* sqlStr = (@"UPDATE User SET Name = 'wweerr' WHERE Id = 19"); //using a direct sql to verify if it works - does not
    SQLiteManager* dbManager =[[SQLiteManager alloc]initWithDatabaseNamed:@"data.db"];
    NSError* error = [dbManager doQuery:sqlStr];
从图书馆:

- (NSError *)doQuery:(NSString *)sql {

    NSError *openError = nil;
    NSError *errorQuery = nil;

    //Check if database is open and ready.
    if (db == nil) {
        openError = [self openDatabase];
    }

    if (openError == nil) {     
        sqlite3_stmt *statement;    
        const char *query = [sql UTF8String];
        sqlite3_prepare_v2(db, query, -1, &statement, NULL);

        if (sqlite3_step(statement) == SQLITE_ERROR) {
            const char *errorMsg = sqlite3_errmsg(db);
            errorQuery = [self createDBErrorWithDescription:[NSString stringWithCString:errorMsg encoding:NSUTF8StringEncoding]
                                                    andCode:kDBErrorQuery];
        }
        //NSLog(@"sql error: %@", error)
        NSInteger result =  sqlite3_finalize(statement);
        errorQuery = [self closeDatabase];
    }
    else {
        errorQuery = openError;
    }
我会尝试使用“WHERE Id='19'”(19带单引号),因为该字段可能被定义为文本,因为sqlite字段是弱类型的。

我发现了这个陷阱。 我使用以下方法包装字符串:initWithFormat

我只分配一个变量,如下所示:

NSString *sqlStr = [[NSString alloc] initWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"];
现在我只需传入该变量:

NSError* error = [[Utilities dbManager] doQuery:sqlStr];
要做/要问:

为什么同样的事情不适用于:

 NSString* sqlStr = [NSString stringWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"];

更新时出现了什么错误?选择了什么。。。其中Id=18?Hi Mark,奇怪的是没有生成错误:(我还做了一些步骤调试,流程在任何时候都没有停止..我不知道为什么这不起作用..从Id=19的用户那里
select*是什么,
giveHi Mark,我发现了陷阱,请看下面我的答案。另外,如果你对我在这里问的这个新问题有答案:Hi Shine,我认为从我运行时起就不是这样了这个关于sqlite管理器的精确查询,运行良好。我也尝试了您所说的只是为了确保,但仍然不起作用。。