我不得不搜索许多关于这些错误的帖子,但我仍然无法解决这个问题。这是我的代码,谁能帮我看看哪里出错了?
- (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 ");
}
}
5条答案
按热度按时间cgvd09ve1#
SQL.sqlite
中没有表Coffee
。如果数据库文件不存在,SQLite会以静默方式创建该文件。因此,如果您弄错了
path
,您将打开 * 一个空的数据库文件 *,其中当然不包含任何表。确保数据库文件存在并且不为空。您可以通过运行
SELECT * FROM sqlite_master;
查询来查看数据库中有哪些表。gcmastyq2#
当我遇到数据库问题时(这里是Oracle),我的DBA告诉我的一件事是尝试使用命令行工具进行查询。
下面是如何诊断sqlite3和iPhone模拟器的问题:
1.在iPhone模拟器中运行应用程序,以便在Documents目录中创建/复制数据库。
1.启动端子
cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents
.最好在模拟器中只安装一个应用程序,这样就可以很明显地看到应用程序是什么。sqlite3 SQL.sqlite
并从那里尝试查询。您还可以使用.schema
命令查看模式的外观。如果查询在那里工作,而不是在你的应用程序中,那么你知道你有一个bug,否则你有一个sqlite查询问题或损坏的模式。
izj3ouym3#
尝试重新安装这应用程序.这些表格是在安装这应用程序的时候创建的.有时它可能发生因为表格没有被创建
krcsximq4#
我有一个“没有这样的表错误”,因为db文件从来没有复制到bin文件夹。在项目中的.db文件中,确保其属性“复制到输出目录”设置为:
6ioyuze25#
我在下面得到了同样的错误:
分析错误:无此表:public.user
当我尝试将表名
public.user
重命名为user
时,如下所示。* 在将PostgreSQL转储文件转换为带有RebaseData的SQLite转储文件时,我遇到了带有.
的表名:因此,我使用
""
作为public.user
,如下所示,然后我可以重命名表名而不会出错。* 我的回答解释得更多: