-2
NSString *docsDir;
NSArray *dirPaths;

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

databasePath = [[NSBundle mainBundle] pathForResource:@"etkYeni2" ofType:@"sqlite"];    

const char *dbpath = [databasePath UTF8String];
sqlite3_stmt    *statement;    


if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK){

    NSLog(@"icerdeyim");

    NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO etk (etkTip) VALUES ('%@')",yeniEkleLabel.text];

    const char *query_stmt = [insertSQL UTF8String];
    sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL);

    if (sqlite3_step(statement) == SQLITE_DONE)
    {
        NSLog(@"OK INSERTED");

    } else {
        NSLog(@"NOT INSERTED !!");

    }
    sqlite3_finalize(statement);
    sqlite3_close(contactDB);
}

これは、テキストボックスから文字列を取得して sqlite データベースに挿入したコードの一部です。firefox extension sqlite manager からデータベースを作成し、アプリに追加しました。シミュレーターと ipod touch で期待どおりに実行されています (要素を挿入し、 SELECT query を使用したときに要素を表示できます) が、 iphone に要素を挿入しません。私のiPod touchはiOS 5にあり、iPhoneはiOS 6にあります.iOSまたはiPhoneのバージョンが原因で、iPod touchはsqliteとは異なるふりをしていますか? この問題のほとんどの回答を読みましたが、まだ解決策が得られません。誰かがこの状況で私を助けることができますか? ありがとう ..

4

2 に答える 2

2

あなたのデータベースは電話帳にコピーされていません。そのデータベースを追加する必要があります。このコードを使用して。

-(void)createdatabase
{

    NSString *databaseName = @"Card.sqlite";        // Database Name



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

    NSString *documentsDir = documentPaths[0];

    NSLog(@"Dir :  %@ ",documentsDir);

    databasePath = [documentsDir stringByAppendingPathComponent:databaseName];


    BOOL success;

        NSFileManager *fileManager = [NSFileManager defaultManager] ;

        success = [fileManager fileExistsAtPath:databasePath];


    if(success)
        return;


    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];


    NSLog(@"%@",databasePathFromApp);


    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];

}

sqlite ファイルをメインバンドルに追加します。これは本当に役に立ちます。

于 2013-05-08T10:23:39.823 に答える
0

これを使ってみてください。その場合に sqlite にデータを挿入する場合は、データベースを作成し、このメソッドを使用してクエリを挿入する必要があります。

- (void)executeQuery:(NSString *)insertQuery
{
    sqlite3_stmt *statement;
    if (sqlite3_open([[self databaseFilePath] UTF8String],&sqliteDB) == SQLITE_OK)
    {
        if(sqlite3_prepare_v2(sqliteDB,[insertQuery UTF8String], -1, &statement, NULL) == SQLITE_OK)
        {
            if(sqlite3_step(statement) != SQLITE_DONE)
            {
                sqlite3_finalize(statement);
            }
        }
        else
            NSLog(@"query Statement Not Compiled");

        sqlite3_finalize(statement);
        sqlite3_close(sqliteDB);
    }
    else
        NSLog(@"Database Not Opened");
}



- (NSString *)databaseFilePath
{
    databaseName=@"abc.sqlite";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *path = [paths objectAtIndex:0];
    return [path stringByAppendingPathComponent:databaseName];
}
于 2013-05-08T10:25:05.113 に答える