0

更新はできませんが、挿入と選択は正常に機能します。

ノート:

1) https://github.com/misato/SQLiteManager4iOSのラッパーを使用しています。

2) INSERT ステートメントでは同じコードが機能しますが、更新では機能しません。

//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;
    }
4

2 に答える 2

0

sqliteフィールドは弱く型付けされているため、フィールドがテキストとして定義されている可能性があるため、「WHERE Id = '19'」(一重引用符で19)を試してみます。

于 2012-07-18T12:46:49.107 に答える
0

落とし穴がわかった。メソッドを使用して文字列をラップしました: initWithFormat

次のように変数を割り当てるだけです。

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

そして今、その変数を渡すだけです:

NSError* error = [[Utilities dbManager] doQuery:sqlStr];

TODO/TO_ASK:

これと同じことが機能しない理由:

 NSString* sqlStr = [NSString stringWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"];
于 2012-07-18T17:46:32.140 に答える