sqlite3查询未被执行

时间:2014-09-24 05:46:22

标签: objective-c xcode sqlite

我正在使用SQLite3处理一些事情,我无法弄清楚为什么我会收到错误。我看过其他SO帖子,没有人能真正指出这个错误,我尝试了很多东西。代码在此行(sqlite3_open(dbPath, &itemDB)==SQLITE_OK)上失败。 我试过了:

  • 评论该行并说sqlite3_open(dbPath, &itemDB),当我这样做时,我的代码仍然存在,但文件夹中没有任何内容
  • 来自NSLog的错误是"无法打开数据库文件"所以我创建了数据库并将其放在路径中,看看是否有帮助,但没有区别
  • 使用断点验证路径,路径正确但从未创建数据库。

         -(void)openDatabase
        {
                NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
                NSString *docPath=[path objectAtIndex:0];
    
                // dbPathString=[docPath stringByAppendingPathComponent:@"items.db"];
                dbPathString = [docPath stringByAppendingPathComponent:@"items.sqlite"];
                char *error;
                NSFileManager *fileManager=[NSFileManager defaultManager];
                if (![fileManager fileExistsAtPath:dbPathString]) {
                    const char *dbPath=[dbPathString UTF8String];
                    //Create DB
                    if (sqlite3_open(dbPath, &items)==SQLITE_OK)
    
                        //  sqlite3_open(dbPath, &items);
    
           {
        const char *sql_stmt= " CREATE TABLE IF NOT EXIST PERSON (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PRICE INTEGER)";
        sqlite3_exec(items, sql_stmt, NULL, NULL, &error);
        sqlite3_close(items);
        NSLog(@"Db Created");
           }
                    NSLog(@"%s", sqlite3_errmsg(items));
                }
        }
    

3 个答案:

答案 0 :(得分:0)

您正在尝试写入文档目录,而不是文档目录。
NSDocumentationDirectory替换为NSDocumentDirectory

答案 1 :(得分:-1)

试试这个tutorial

NSString *docsDir;
NSArray *dirPaths;

// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];

// Build the path to the database file
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];

NSFileManager *filemgr = [NSFileManager defaultManager];

if ([filemgr fileExistsAtPath: databasePath ] == NO) {
    const char *dbpath = [databasePath UTF8String];

    if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) {
        char *errMsg;
        const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)";

        if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) {
            status.text = @"Failed to create table";
        }
        sqlite3_close(contactDB);
    }
    else {
        status.text = @"Failed to open/create database";
    }
}

答案 2 :(得分:-1)

这将有助于你

#import<sqlite3.h>

    -(BOOL)createTable
    {
        NSArray *yourArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath=[yourArray objectAtIndex:0];

    filePath =[filePath stringByAppendingPathComponent:@"yourdatabase.sqlite"];

    NSFileManager *manager=[NSFileManager defaultManager];

    BOOL success = NO;
    if ([manager fileExistsAtPath:filePath]) 
    {
        success =YES;
    }
    if (!success) 
    {
        NSString *path2=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"yourdatabase.sqlite"];
        success =[manager copyItemAtPath:path2 toPath:filePath error:nil];
    }
    createStmt = nil;
    NSString *tableName=@"SecondTable";
    if (sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
        if (createStmt == nil) {

            NSString *query=[NSString stringWithFormat:@"create table (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PRICE INTEGER)];

            if (sqlite3_prepare_v2(database, [query UTF8String], -1, &createStmt, NULL) != SQLITE_OK) {
                return NO;
            }
            sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL);
            return YES;
        }
    }
    return YES;
    }