iOS9 - SQlite3_changes看起来像破碎

时间:2015-10-10 15:36:39

标签: ios iphone sqlite ios9

我们现有的SQlite3数据库实现在iOS v8.4.1上完美运行。 在iOS9上,数据库模块无法按照预期工作。在调查此问题时,我们发现SQlite3_changes未提供自上次修改以来DB中发生的更改计数。

有没有人遇到过类似的问题?谢谢你的帮助......

我们定义了一种按需插入记录的方法。方法: 1.如果可以使用sqlite3_open打开数据库 2.准备SQL语句 - sqlite3_prepare_v2 3.逐个执行SQL语句 - sqlite3_step,直到完成所有记录。 4.对每个执行的sql语句执行sqlite3_reset和sqlite3_finalize。 5.使用sqlite3_exec提交事务 6. sqlite3_close - 最后关闭数据库。

在后续调用中,我们检查DB更改,该更改始终返回0.

  • (int)DBchanges { int值; if((value = sqlite3_changes(self-> _db))!= SQLITE_OK){     NSLog(@"条目失败:%s",sqlite3_errmsg(self-> _db)); } 回报值; }

2 个答案:

答案 0 :(得分:1)

请发布一个显示问题的小型可编辑示例。这在iOS 9模拟器中工作正常:

sqlite3 *database = NULL;
int err = sqlite3_open( ":memory:", &database );
if ( err == 0 )
    err = sqlite3_exec(database, "Create table if not exists MyTable (MyColumn integer);", NULL, NULL, NULL );

// prints "1"
err = sqlite3_exec(database, "insert into MyTable values(0);", NULL, NULL, NULL );
if ( err == 0 )
    NSLog( @"changes: %d", sqlite3_changes(database) );

// prints "3"
err = sqlite3_exec(database, "insert into MyTable values (0), (1), (2);", NULL, NULL, NULL );
if ( err == 0 )
    NSLog( @"changes: %d", sqlite3_changes(database) );

答案 1 :(得分:1)

documentation说:

  

此函数返回由唯一参数指定的数据库连接上最近完成的INSERT,UPDATE或DELETE语句修改,插入或删除的行数。

如果您关闭连接并打开另一个连接,它将无效。