我不得不搜索许多有关这些错误的帖子,但仍然无法解决问题。这是我的代码,有人可以帮我看看出了什么问题吗?
- (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 ");
}
}
Coffee
中没有桌子SQL.sqlite
。
如果数据库文件不存在,SQLite 会默默地创建该文件。因此,如果您弄错了
path
,那么您将打开一个空数据库文件,当然它不包含任何表。确保数据库文件存在并且不为空。
您可以通过运行
SELECT * FROM sqlite_master;
查询来查看数据库中有哪些表。
当我遇到数据库问题(本例中为 Oracle)时,我的 DBA 告诉我的一件事是尝试使用命令行工具进行查询。
这是诊断 sqlite3 和 iPhone 模拟器问题的方法:
cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents
。模拟器中最好只安装一个应用程序,这样应用程序是什么就一目了然了。sqlite3 SQL.sqlite
并从那里尝试您的查询。您还可以使用 .schema
命令查看模式。如果查询在那里工作而不是在你的应用程序中工作,那么你就知道你有一个错误,否则你有一个 sqlite 查询问题或损坏的架构。
尝试重新安装应用程序。表是在安装应用程序时创建的。有时可能会因为未创建表而发生这种情况
我遇到了“没有这样的表错误”,因为 db 文件从未复制到 bin 文件夹。 项目中的 .db 文件确保其属性“复制到输出目录”设置为:
我在下面遇到了同样的错误:
解析错误:没有这样的表:public.user
当我尝试将表名称
public.user
重命名为 user
时,如下所示。 *当我使用 RebaseData将 PostgreSQL 转储文件转换为 SQLite 转储文件时,出现了带有
.
的表名:
ALTER TABLE public.user RENAME TO user;
所以,我使用
''
或""
代替public.user
,如下所示,然后我可以重命名表名称而不会出现错误:
# ↓ ↓
ALTER TABLE 'public.user' RENAME TO user;
或者:
# ↓ ↓
ALTER TABLE "public.user" RENAME TO user;