iphone - 无法从 ios 5 在 sqlite 中插入数据

标签 iphone ios sqlite ios5

我正在尝试插入一些数据 sqlite 数据库...我确信插入查询是正确的,因为我从终端和 sqlite 管理器进行了测试,但它不是从 ios5 插入的...请帮忙!!!

-(BOOL)insertWithRawQuery:(NSString*) query
{
        sqlite3_stmt    *statement;
        BOOL success = NO;
        if (sqlite3_open([databaseFilePath UTF8String], &database) == SQLITE_OK)
        {
            NSLog(@"%@",query);
            const char *insert_stmt = [query UTF8String];

            sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);
            if (sqlite3_step(statement) == SQLITE_DONE)
            {
                success=YES;
            } else 
            {
                success=NO;
                NSLog(@"%d",sqlite3_step(statement));
            }
            sqlite3_finalize(statement);
       }
         sqlite3_close(database);
        return success;
}

    NSLog(@"%d",sqlite3_step(statement))

打印 21 是 SQLITE_MISUSE.. 你知道吗?

最佳答案

这就是我在 iOS 5 中将数据插入 sqlite 的方式,并且运行良好。

-(void) checkAndCreateDatabase{
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:databasePath];
    if(success) return;
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}

-(void) openDatabase
{   
    NSArray *documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [documentsPaths objectAtIndex:0];   
    databasePath = [documentDir stringByAppendingPathComponent:YOUR_DATABASE_NAME];
    [self checkAndCreateDatabase];  
    if(sqlite3_open([databasePath UTF8String],&database) == SQLITE_OK)
        NSLog(@"Database opened.");
}

-(BOOL)insertDataWithUsername:(NSString*)name withPassword:(NSString*)password withAge:(int)age
{
    [self openDatabase];
    NSString *query = nil;
    query = [NSString stringWithFormat:@"INSERT INTO your_table(name, password, age) Values('%@','%@', %d)", name, password, age];

    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK) 
    {   
        if(SQLITE_DONE != sqlite3_step(compiledStatement))
            NSLog( @"Error while inserting data: '%s'", sqlite3_errmsg(database));
        else NSLog(@"New data inserted");

        sqlite3_reset(compiledStatement);       
    }else
    {
        NSLog( @"Error while inserting '%s'", sqlite3_errmsg(database));
    }
    sqlite3_finalize(compiledStatement);
}

关于iphone - 无法从 ios 5 在 sqlite 中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265636/

相关文章:

iphone - 在 iPhone 上快速开发应用程序的 Monotouch 还是 Titanium?

ios - 使用 IQKeyboardManagerSwift 不显示下一个/上一个按钮

android - 合并的 SQL 查询问题

SQLite3选择语句

ios - 自动布局中按钮之间的等宽和等间距

iphone - 访问 UITableView 的 "default"方法

ios - 我在检查闭包中是否为 nil 时收到错误

android - Android SQLiteDatabase.openDatabase() 可以用来打开远程sqlite数据库吗?

ios - 使用 SpriteKit 具有可重复背景的 PanGesture

ios - 缩小动画 Swift