如何使用firefox插件创建.sqlite文件

时间:2013-04-07 14:29:42

标签: ios objective-c sqlite

我创建了我的表并使用firefox sqlite manager扩展插入了我的数据,保存并添加了我的sqlitefile,这是“notifications.sqlite”之后我编写了这段代码,但它会输出 nothing 。< / p>

打开.sqlite文件和.db文件有什么区别吗?如何正确打开我的数据库?

* UPDATE: *调试后,朋友评论说这行有问题:

databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"notifications.sqlite"]];

之后

  if ([filemgr fileExistsAtPath: databasePath ] == YES)

如果不是,那么它将丢失所有内容,因此数据库路径有点错误

我的表格如下:

CREATE TABLE "quotes_type" ("type_id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "content" VARCHAR)

这是我打开.sqlite文件的努力:

- (void)viewDidLoad{

  NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *docsDir = [dirPaths objectAtIndex:0];
    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"notifications.sqlite"]];
    sqlite3_stmt *statement;
    NSFileManager *filemgr = [NSFileManager defaultManager];
    if ([filemgr fileExistsAtPath: databasePath ] == YES)
    {
    if (sqlite3_open([databasePath UTF8String], &contactDB) == SQLITE_OK)
    {

        NSString *qrycount = [NSString stringWithFormat: @"select * from quotes_type"];

        const char *count_stmt = [qrycount UTF8String];

        sqlite3_prepare_v2(contactDB, count_stmt, -1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_ERROR) {
            NSAssert1(0,@"Error when selecting rows  %s",sqlite3_errmsg(contactDB));
        } else {
              NSLog(@"negin");
            int myid=sqlite3_column_int(statement, 0);
            NSString *text = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,1)];
            NSLog(@"myid is %d",myid);
            NSLog(@"text is %@",text);
            sqlite3_finalize(statement);
            sqlite3_close(contactDB);
        }
    }
    else NSLog(@"openning has problem");
    }
}

2 个答案:

答案 0 :(得分:1)

您正在Documents中检查数据库。但你有没有把它复制到那里?如果没有,你永远不会在那里找到它。您确实要检查文件,如果找不到,请将其从捆绑包复制到Documents文件夹。因此,如果您在Documents中找不到数据库,则应通过以下方式复制它:

NSError *error;
NSString *bundleDatabasePath = [[NSBundle mainBundle] pathForResource:@"notifications" ofType:@"sqlite"];
NSAssert(bundleDatabasePath, @"database not found in bundle");
if (![filemgr copyItemAtPath:bundleDatabasePath toPath:databasePath error:&error])
    NSLog(@"%s: copyItemAtPath failure: error = %@", __FUNCTION__, error); 

答案 1 :(得分:0)

您可以使用FMDB管理您的sqlite数据库,这很简单。

github上:FMDB