创建更新语句时出错。没有这样的表格:***'

时间:2015-06-26 09:00:31

标签: ios objective-c sqlite

我有一个sqlite数据库,有一个" conjugare"表,但我得到了这个:

创建更新语句时出错。没有这样的表:conjugare'

我试图创建一个数据库副本。数据库可以打开。我认为我的文件存在问题,因为它可能像txt文件而不是sqlite一样被读取?我在stackoverflow的其他问题中读到了这个,我试图实现它,但没有结果。请帮忙解决这个问题吗?

+ (FailedBankDatabase*)database {
        if (_database == nil) {
            _database = [[FailedBankDatabase alloc] init];
        }
        return _database;
    }

    - (id)init {
        if ((self = [super init])) {

            NSString *sqLiteDb = [[NSBundle mainBundle] pathForResource:@"conjugareDB" ofType:@"sqlite"];

            if (sqlite3_open([sqLiteDb UTF8String], &_database) != SQLITE_OK) {
                NSLog(@"Failed to open database!");
            }
            else
                [self createEditableCopyOfDatabaseIfNeeded];
            NSString *docsDir;
            NSArray *dirPaths;

            // Get the documents directory
            dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

            docsDir = dirPaths[0];

            // Build the patht to the database file
            NSString * databasePath = [[NSString alloc]initWithString: [docsDir stringByAppendingPathComponent: @"conjugareDB.sqlite"]];

            if (sqlite3_open([databasePath UTF8String], &_database) != SQLITE_OK) {
                NSLog(@"Failed to open database!");
            }


            NSFileManager *filemgr = [NSFileManager defaultManager];

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

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

                    if (sqlite3_exec(_database, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) {
                        NSLog(@"Failed to create table");

                    }

                    sqlite3_close(_database);
                } else {
                    NSLog( @"Failed to open or create database");
                }
            }
        }
        return self;
    }
    - (void) createEditableCopyOfDatabaseIfNeeded
    {
        BOOL success;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"conjugareDB.sqlite"];
        success = [fileManager fileExistsAtPath:writableDBPath];
        if (success) return;
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"conjugareDB.sqlite"];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
        if (!success) {
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
        }
    }


    - (void)dealloc {
        sqlite3_close(_database);
        [super dealloc];
    }

    - (NSArray *)failedBankInfos {

        NSMutableArray *retval = [[[NSMutableArray alloc] init] autorelease];


        NSString *query = @"select id from conjugare";
        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
            while (sqlite3_step(statement) == SQLITE_ROW) {
                int uniqueId = sqlite3_column_int(statement, 0);
                char *nameChars = (char *) sqlite3_column_text(statement, 1);
                char *cityChars = (char *) sqlite3_column_text(statement, 2);
                char *stateChars = (char *) sqlite3_column_text(statement, 3);
                NSString *name = [[NSString alloc] initWithUTF8String:nameChars];
                NSString *city = [[NSString alloc] initWithUTF8String:cityChars];
                NSString *state = [[NSString alloc] initWithUTF8String:stateChars];
                FailedBankInfo *info = [[FailedBankInfo alloc] initWithUniqueId:uniqueId name:name city:city state:state];                        
                [retval addObject:info];
                [name release];
                [city release];
                [state release];
                [info release];
            }
            sqlite3_finalize(statement);
        }

        else
        {
            NSLog(@"Error while creating update statement. '%s'", sqlite3_errmsg(_database));
        }
        return retval;

    }

1 个答案:

答案 0 :(得分:0)

转到目标 - >构建阶段 - >复制捆绑资源点击它上面的+&从资源中选择Sqlite Database rdb文件。