objective-c - 使用 sqlite3_exec 在 Objective-c 中进行事务并没有达到预期的效果
<p><p>早上好!</p>
<p>我目前正在使用 Objective-c 开发一个 iOS 应用程序,并且我有一个本地数据库,我允许用户通过互联网进行更新。
数据库可以在短短几天内发生相当大的变化,因此可以全部减少到几行,而之前有数十万行(不太可能但仍然如此)。</p>
<p>我正在使用 sqlite 并尝试执行事务性删除,并且在运行以下代码时没有出现任何错误,但它没有达到预期的效果,即应该删除的行没有被删除!</p>
<p>我之前、之后和之后都在数据库上运行过选择查询,但总是找到应该删除的数据。</p>
<p>这里是代码</p>
<pre><code>@try {
if(sqlite3_open(, &db) == SQLITE_OK){
//Db exists and can be open
sqlite3_exec(db, "BEGIN EXCLUSIVE TRANSACTION", 0, 0, 0);
sqlite3_stmt *stmt;
const char *query = [[NSString stringWithFormat:@"DELETE FROM %@
WHERE ? = '?'", table] UTF8String];
if(sqlite3_prepare_v2(db, query, -1, &stmt, NULL)== SQLITE_OK)
{
//integer i = 0
//PrimaryKey contains k primaryKeys
for(int i=0; i<; i++){
//i = j < k
sqlite3_bind_text(stmt, 1, (const char *)
, , SQLITE_STATIC);
sqlite3_bind_text(stmt, 2,
(const char *)[ UTF8String]
, [ lengthOfBytesUsingEncoding:NSUTF8StringEncoding ]
, SQLITE_STATIC);
if (sqlite3_step(stmt) != SQLITE_DONE){
NSLog(@"Delete commit failed. Error %s", sqlite3_errmsg(db));
return NO;
}
if(sqlite3_reset(stmt)!= SQLITE_OK){
NSLog(@"SQL error %s", sqlite3_errmsg(db));
return NO;
}
}
//i = k
}
if(sqlite3_exec(db, "COMMIT TRANSACTION", 0, 0, 0) != SQLITE_OK){
NSLog(@"SQL error %s", sqlite3_errmsg(db));
return NO;
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return YES;
}
NSLog(@"SQL error %s", sqlite3_errmsg(db));
sqlite3_close(db);
return NO;
}
@catch (NSException *exception) {
NSLog(@"%@", );
return NO;
}
</code></pre>
<p>非常感谢那些更习惯在 sqlite 中使用事务的人提供的任何帮助或提示。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>你没有检查结果</p>
<pre><code>sqlite3_exec(db, "BEGIN EXCLUSIVE TRANSACTION", 0, 0, 0);
</code></pre>
<p></p> 中有多余的引号
<pre><code>WHERE ? = '?'
</code></pre>
<p><code>sqlite3_bind_text</code></p> 不需要这些引号
<p>我怀疑您正在尝试为参数 1 绑定(bind)列名。您不能在 SQLite 中执行此操作。 <code>sqlite3_prepare_v2</code> 需要知道列名;您的查询只是将列名与参数 2 进行比较。</p></p>
<p style="font-size: 20px;">关于objective-c - 使用 sqlite3_exec 在 Objective-c 中进行事务并没有达到预期的效果,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12937288/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12937288/
</a>
</p>
页:
[1]