我用Sqlite Manager创建了一个数据库,并在我的资源中导出了我的数据库。 我试图直接在我的项目文件夹中重新创建数据库,我有同样的错误。 我不明白为什么...... 我试图在我的终端中打开我的数据库,但无法打开我的数据库,我有:
sqlite> .tables
Error: file is encrypted or is not a database
我对这个链接做了所有事情,但对我来说没什么用 How to use sqlite in ios 7?
int returnValue = (sqlite3_prepare_v2(databaseOK, [selectSql UTF8String], -1, &statement, NULL));
这一行在我的returnValue中给了我26个
-(id) initDatabase{
if (self = [super init]) {
//Nom de la base de données
self.databaseName = @"externalDB.sqlite";
// Obtenir le chemins complet de la base de donées
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
self.databasePath = [documentsDir stringByAppendingPathComponent:self.databaseName];
NSLog(@"%@",self.databasePath);
}
return self;
}
-(NSArray*) selectALLArticle{
sqlite3 *databaseOK=self.database;
NSMutableArray* articles = [NSMutableArray new];
if(sqlite3_open([self.databasePath UTF8String], &databaseOK) == SQLITE_OK) {
NSString* selectSql =[NSString stringWithFormat:@"SELECT * FROM ART_TABLE"];
sqlite3_stmt* statement = NULL;
int returnValue = (sqlite3_prepare_v2(databaseOK, [selectSql UTF8String], -1, &statement, NULL));
NSLog(@"Database returned error %d: %s", sqlite3_errcode(databaseOK), sqlite3_errmsg(databaseOK));
if(returnValue == SQLITE_OK){
while (sqlite3_step(statement) == SQLITE_ROW) {
Data* article = [Data new];
article.ide = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement,0)];
article.title = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
article.chapo = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 2)];
article.link = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 3)];
article.linkImg = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 4)];
article.pubDate = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 5)];
article.creator = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 6)];
article.description = (NSMutableString*)[NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 7)];
[articles addObject:article];
}
sqlite3_finalize(statement);
}
}
sqlite3_close(databaseOK);
return articles;
}
在我的logcat中,我有: 数据库返回错误26:文件已加密或不是数据库
使用以下行:NSLog(@"Database returned error %d: %s", sqlite3_errcode(databaseOK), sqlite3_errmsg(databaseOK));
当我使用SQLite Manager创建数据库时,创建了另一个表,他的名字是:sqlite_sequence,那是什么?
感谢您提前
答案 0 :(得分:0)
如果要将库存数据库与应用程序捆绑在一起,则它不会位于Documents目录中,而是位于应用程序包中。虽然特定错误没有帮助,但我怀疑数据库文件是从头开始创建的,然后错过了您正在寻找的表。
答案 1 :(得分:0)
FMDB和BWDB 对于目标c来说是好的且易于使用的sqlite包装器。我建议你使用其中一种。
请注意,BWDB在lynda.com教程(这一个)中,如果你没有在网上找到它...留下评论,我会把它上传到某个地方。
编辑:您可以在应用程序中编写内容的唯一位置是在您的文档目录中...所以..简单的术语...如果数据库不在您的文档目录中...是只读的...也是..当您读取/写入您的数据库时,操作系统会复制文档目录中的数据库..并执行所有读取和写入操作,以便您可以在应用程序包中创建数据库但不能编辑该数据库。 ..所以你最终会得到2分。我自己也遇到了同样的问题。我在更新应用程序时通过合并2分贝来修复它
答案 2 :(得分:0)
检查sqlite版本。如果您使用的是sqlite 版本2 ,则可能会发生错误。 将sqlite 版本2 更改为 版本3 。 它对我有用......