Sqlite UPDATE问题

时间:2011-05-17 16:23:20

标签: iphone ios sqlite

您好我正在编写一个需要sqlite和一个更新查询的iphone应用程序。简单地说,为什么这样做:

NSString *query=[NSString stringWithFormat:@"%@%@%@%@%@",
    @"UPDATE ZTABELLA SET ZTYPE =",@"1",
    @" WHERE ZNAME='",@"stringaoggetto",@"';"];

sqlite3_exec(database2, [query UTF8String], NULL, NULL, NULL);  

以及为什么这不起作用:

NSString *query=[NSString stringWithFormat:@"%@%@%@%@%@",
    @"UPDATE ZTABELLA SET ZTYPE =",@"1",
    @" WHERE ZNAME='",oggetto,@"';"];

sqlite3_exec(database2, [query UTF8String], NULL, NULL, NULL);  

这两个示例之间的区别仅在于第一个@"stringaoggetto"和第二个oggetto。在第一个我直接用字符串插入值,在第二个例子中oggetto是一个nsstring对象,里面有正确的值(我打印了一个nslog)。为何如此区别?

每个示例的查询日志都相同:

NSLog(@" %@",query);
//this log print: UPDATE ZTABELLA SET ZTYPE =1 WHERE ZNAME='stringaoggetto';

nsstring对象“oggetto”的日志是:

NSLog(@"%@",oggetto);
//this log print   stringaoggetto

我还尝试了另一个代码来检查错误,但结果是一样的:

if (sqlite3_open([dbPath2 UTF8String], &database2) == SQLITE_OK) {


      const char *update = "UPDATE ZTABELLA SET ZTYPE =1 WHERE ZNAME=?";

      sqlite3_stmt *updatestmt;
if(sqlite3_prepare_v2(database2, update, -1, &updatestmt, NULL) == SQLITE_OK) {

sqlite3_bind_text(updatestmt, 1, [oggetto UTF8String] , -1, SQLITE_TRANSIENT);


if(SQLITE_DONE != sqlite3_step(updatestmt)){

    NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database2));

                }
sqlite3_reset(updatestmt);                  

            }
            else {
                NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database2));

            }
            }

在这种情况下,作为第一个直接查询(使用sqlite3_exc),sqlite3_bind_text在where子句之后不起作用。使用相同的查询,如果我尝试测试目的设置ZNAME的ZTYPE列(但任何其他列不能设置“Where”)它的工作原理。为什么呢?

这是nsstring oggetto的init,是select query的结果:

NSMutableString *oggetto;
oggetto=[NSString stringWithCString:(char *)sqlite3_column_text(selectstmt, 0)];

这个字符串正确保留了值(值为“stringaoggetto”),我尝试过使用nslog。

1 个答案:

答案 0 :(得分:0)

  1. 改为做; [query cStringUsingEncoding:NSUTF8StringEncoding]我认为这是解决这个问题所需要的关键。确保保留字符串;这两个都应该有用。

    NSLog(@“%s”,[query cStringUsingEncoding:NSUTF8StringEncoding]);

    NSLog(@“%s”,[查询UTF8String]);

  2. 这也可能有一些有用的提示; http://www.how2s.org/index.php/How_to_get_started_with_SQLite_on_the_iPhone 简化设计。

  3. 另外值得注意的是,您使用NULL,NULL,NULL。从sqlite3_exec语句中获取错误数据。 http://www.sqlite.org/c3ref/exec.html有参考资料可以帮助您开始。

  4. 您列出了多个问题。将其他问题与其他问题分开。插入与更新不同。将此问题集中在更新上。

  5. 如果这些都没有帮助,NSString * ogget如何设置,在哪里,相同的文件,差异文件,它是一个函数参数等?