首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqliteManager的更新问题

sqliteManager的更新问题
EN

Stack Overflow用户
提问于 2012-07-18 20:30:53
回答 2查看 270关注 0票数 0

我不能进行更新,但插入和选择可以很好地工作。

注意:

1)我使用的包装器来自:https://github.com/misato/SQLiteManager4iOS

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

代码语言:javascript
复制
//NSString* sqlStr = (@"INSERT INTO sbu (sbuName) VALUES ( 'rrrr' );)"); //WORKS

3)代码如下:

与此更新相关的代码如下:

我的内联代码

代码语言:javascript
复制
    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];

从库中:

代码语言:javascript
复制
- (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;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-19 01:46:32

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

我只需像这样分配一个变量:

代码语言:javascript
复制
NSString *sqlStr = [[NSString alloc] initWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"];

现在我只需要传递这个变量:

代码语言:javascript
复制
NSError* error = [[Utilities dbManager] doQuery:sqlStr];

TODO/TO_ASK:

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

代码语言:javascript
复制
 NSString* sqlStr = [NSString stringWithFormat:@"UPDATE User SET Name = 'some name' WHERE sbuId = 19"];
票数 0
EN

Stack Overflow用户

发布于 2012-07-18 20:46:49

我会尝试使用"WHERE Id = '19'“(带单引号的19),因为该字段可能被定义为文本,因为sqlite字段是弱类型的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11541405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档