2010-06-17 136 views
1

我试图做一个简单的应用程序,存储和显示闪存卡,但我有一段糟糕的时间让我的SQLite工作。数据库连接是好的,但是当我尝试插入时,它会崩溃并且没有指出哪里出了问题。这是我用来将闪存卡插入表中的代码。iPhone应用程序崩溃与sqlite3_bind_text()

const char *insert = "INSERT OR REPLACE INTO LIST (TERM, DEFINITION) VALUES (?, ?);"; 
sqlite3_stmt *statement; 
sqlite3_prepare_v2(database, insert, -1, &statement, nil); 
sqlite3_bind_text(statement, 1, [term UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(statement, 2, [def UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_step(statement); 
sqlite3_finalize(statement); 

我确定绑定文本方法是我之前放置的一些NSLog()方法的薄弱环节。在这个例子中,term和def是NSStrings,确实保持正确的值(我知道这很确定)。任何帮助,将不胜感激。我还没有掌握便携式c。

+0

如果您使用的是包装器,则不会遇到此问题:http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb – 2010-06-17 20:19:27

+1

或者仅使用核心数据;除非必须与非电话/ Mac机器共享数据库,否则使用CoreData的原因有很多。 – bbum 2010-06-17 21:07:09

回答

2

不是100%,为什么它不工作,但我有一些事情要提示:

摆脱的;在插入声明的最后,我从来没有在我的。

把准备并步入一个if语句,像这样

if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK) { 
     NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(db)); 
} 
if (SQLITE_DONE != sqlite3_step(statement)) { 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db)); 
} 

无的,这可能帮助,但它可能让你更接近,以什么是错。

此外,有一件事可能会有所帮助。当我一直在使用SQLite时,如果我对数据库进行了更改或者我没有正确输入数据,那么它会非常痛苦。我花了很多时间重新设置iPhone模拟器并清理构建版本