您好我正在编写一个需要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。
答案 0 :(得分:0)
改为做; [query cStringUsingEncoding:NSUTF8StringEncoding]我认为这是解决这个问题所需要的关键。确保保留字符串;这两个都应该有用。
NSLog(@“%s”,[query cStringUsingEncoding:NSUTF8StringEncoding]);
NSLog(@“%s”,[查询UTF8String]);
这也可能有一些有用的提示; http://www.how2s.org/index.php/How_to_get_started_with_SQLite_on_the_iPhone 简化设计。
另外值得注意的是,您使用NULL,NULL,NULL。从sqlite3_exec语句中获取错误数据。 http://www.sqlite.org/c3ref/exec.html有参考资料可以帮助您开始。
您列出了多个问题。将其他问题与其他问题分开。插入与更新不同。将此问题集中在更新上。
如果这些都没有帮助,NSString * ogget如何设置,在哪里,相同的文件,差异文件,它是一个函数参数等?