0

我已经使用 Sqlite Manager 创建了一个数据库,并将我的数据库导出到我的资源中。我试图直接在我的项目文件夹中重新创建数据库,我有同样的错误。我不明白为什么......我试图在我的终端中打开我的数据库并且无法打开我的数据库,我有:

sqlite> .tables
Error: file is encrypted or is not a database

我对这个链接做了所有的事情,但对我没有 用 如何在 ios 7 中使用 sqlite?

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

感谢提前

4

3 回答 3

0

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

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

请注意,BWDB 位于 lynda.com 教程(此教程)中,如果您在网络上找不到它……请发表评论,我会将其上传到某个地方。

编辑:你可以在你的应用程序中写东西的唯一地方是在你的文档目录中......所以..它是简单的术语......如果数据库不在你的文档目录中..是只读的..也是..当您读/写到您的数据库..操作系统将数据库复制到文档目录中..并在那里进行所有读取和写入,因此您可以在应用程序包中拥有一个数据库,但您不能编辑那个...所以你最终会得到 2 db。我自己也有同样的问题。我在更新应用程序时通过合并 2 db 来修复它

于 2013-11-13T14:35:29.140 回答
0

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

于 2013-11-13T14:08:00.490 回答
0

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

于 2015-04-21T06:43:19.843 回答