Sqlite INSERT INTO不在iphone中进行,而是在模拟器和ipod touch上进行?

时间:2013-05-08 10:11:15

标签: iphone ios sqlite sql-insert

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扩展sqlite管理器创建了数据库并将其添加到应用程序。它正如我在模拟器和ipod中所期望的那样运行我想要的东西(插入元素,当我使用SELECT查询时我可以看到它们),但它不是在iphone上插入元素。我的ipod touch在iOS 5上,iphone在iOS 6上。是因为iOS或iphone的版本和ipod touch是不同的sqlite或者是什么?我阅读了这个问题的大部分答案,仍然没有得到解决方案。有人可以在这种情况下帮助我吗? 谢谢..

2 个答案:

答案 0 :(得分: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文件添加到mainbundle中。 这真的很有帮助。

答案 1 :(得分: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];
}