数据库返回错误26:文件已加密或不是数据库

时间:2013-11-13 13:43:58

标签: ios sqlite

我用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,那是什么?

感谢您提前

3 个答案:

答案 0 :(得分:0)

如果要将库存数据库与应用程序捆绑在一起,则它不会位于Documents目录中,而是位于应用程序包中。虽然特定错误没有帮助,但我怀疑数据库文件是从头开始创建的,然后错过了您正在寻找的表。

答案 1 :(得分:0)

如果你不知道自己在做什么,那么sqlite会很痛苦。我也有一些sqlite c函数的问题,但后来我决定使用sqlite包装器。

FMDB和BWDB 对于目标c来说是好的且易于使用的sqlite包装器。我建议你使用其中一种。

请注意,BWDB在lynda.com教程(这一个)中,如果你没有在网上找到它...留下评论,我会把它上传到某个地方。

编辑:您可以在应用程序中编写内容的唯一位置是在您的文档目录中...所以..简单的术语...如果数据库不在您的文档目录中...是只读的...也是..当您读取/写入您的数据库时,操作系统会复制文档目录中的数据库..并执行所有读取和写入操作,以便您可以在应用程序包中创建数据库但不能编辑该数据库。 ..所以你最终会得到2分。我自己也遇到了同样的问题。我在更新应用程序时通过合并2分贝来修复它

答案 2 :(得分:0)

检查sqlite版本。如果您使用的是sqlite 版本2 ,则可能会发生错误。 将sqlite 版本2 更改为 版本3 。 它对我有用......