2

テーブルを作成し、Firefox sqlite マネージャー拡張機能を使用してデータを挿入し、「notifications.sqlite」である sqlitefile を保存して追加しました。その後、このコードを書きましたが、何も出力されませ

.sqlite ファイルと .db ファイルを開くことに違いはありますか? どうすればデータベースを正しく開くことができますか?

*更新: *友人がコメントしたようにデバッグした後、次の行に問題があります:

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

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

if が NOT YES なので、すべてが失われるため、databasePath が間違っている

私のテーブルは次のとおりです。

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");
    }
}
4

2 に答える 2

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); 
于 2013-04-07T15:21:42.167 に答える
0

FMDB を使用して sqlite データベースを管理できます。非常に簡単です。

github: FMDB

于 2013-04-08T04:01:24.883 に答える