我不得不搜索了很多关于这些错误的帖子,但我仍然无法修复这个问题。这是我的代码,有人能帮我看看出了什么问题吗?
- (void) copyDatabaseIfNeeded {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"SQL.sqlite"];
if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK)
{
NSLog(@"Database opened successfully");
if(updateStmt == nil) {
NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"];
const char *mupdate_stmt = [updStmt UTF8String];
if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection));
} else {
NSLog(@"Update successful");
}
}
if(SQLITE_DONE != sqlite3_step(updateStmt))
NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection));
else {
sqlite3_reset(updateStmt);
NSLog(@"Step successful");
}
}
else
{
NSLog(@"Error in opening database ");
}
}
4条答案
按热度按时间xkrw2x1b1#
SQL.sqlite
中没有表Coffee
。如果数据库文件不存在,SQLite会自动创建它。所以如果你的
path
输入错误,你打开的是一个空的数据库文件,当然它不包含任何表。确保数据库文件存在并且不是空的。您可以通过运行
SELECT * FROM sqlite_master;
查询来查看数据库中有哪些表。yvfmudvl2#
当我遇到数据库问题(在本例中是Oracle)时,DBA告诉我的一件事是使用命令行工具尝试查询。
以下是诊断sqlite3和iPhone模拟器问题的方法:
1.在“iPhone模拟器”中运行应用程序,以便在“文稿”目录中创建/复制数据库。
1.启动终端
cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents
。最好在模拟器中只安装一个应用程序,这样就可以很明显地看出哪个应用程序是什么。sqlite3 SQL.sqlite
并从那里尝试查询。您也可以使用.schema
命令来查看架构的外观。如果查询在那里工作,而不是在你的应用程序,那么你知道你有一个错误,否则你有一个sqlite查询问题或坏模式。
30byixjq3#
尝试重新安装这应用程序.这表是创建在这时候安装这应用程序.有时它可能发生因为这表是不创建
dy2hfwbg4#
我遇到了一个“no such table error”,因为db文件从未被复制到bin文件夹。在项目中的一个.db文件中,确保其属性“Copy to Output Directory”设置为: