插入语句不起作用(即使在Documents文件夹中复制的数据库中)

时间:2013-08-01 12:22:49

标签: ios sqlite

首先,我是新来的,所以我要感谢在我的项目中帮助了我很多的社区。

我实际上正在处理一个必须从本地sqlite db为客户提供信息的应用程序。

我做了以下事情:

  • 我在启动应用程序时复制sqlite数据库(如果文档文件夹中没有数据库)

  • 当用户要求在界面中进行更新时,会调用一个方法并填充数据库中的customer_information表。

  • 当用户返回主屏幕时,会调用一个方法并根据sqlite数据库中的值显示刷新信息。

问题是没有显示任何值。 XCode无法在我的代码中发现任何错误,即使我尝试了许多不同的插入值的方法,我也无法找到问题所在。

提前谢谢你,抱歉我的英语不好,我是法国人。

此致。

请从我的源代码中找到以下摘录,您有任何疑问,请不要犹豫:

复制文档文件夹中的数据库

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSError *emsg;
    BOOL fileExist;

    //Get list of directories in Document path
    NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    //Define new path for database
    NSString *documentPath = [[dirPath objectAtIndex:0] stringByAppendingPathComponent:@"Vidagen_ios.sqlite"];

    // Path of db in the application
    NSString *origin = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Vidagen_ios.sqlite"];

    fileExist = [[NSFileManager defaultManager] fileExistsAtPath:documentPath];

    if(!fileExist){
        [[NSFileManager defaultManager] copyItemAtPath:origin toPath:documentPath error:&emsg];
        NSLog(@"db copied");
    }

    // Override point for customization after application launch.
    return YES;
}

更新方法

- (void)insertRecords
{
    sqlite3_stmt *sqlStatement = nil;
    sqlite3 *newDb;

    // Request
    const char *sql = "INSERT INTO client_information(client_info_id, client_info_name, client_info_sex, client_info_age, client_info_id_card, client_info_tel, client_info_tall, client_info_weight, client_info_address, client_info_email, client_info_pwd, client_info_client_source_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";

    // Path of copied db
    NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *database = [[dirPath objectAtIndex:0] stringByAppendingPathComponent:@"Vidagen_ios.sqlite"];

    // db sequence
    if(sqlite3_open([database UTF8String], &newDb) == SQLITE_OK){
        NSLog(@"ouverture de la base ok");
        for (int i=0; i<11; i++) {
            sqlite3_bind_text(sqlStatement, i, [[NSString stringWithFormat:@"Test"] UTF8String], -1, SQLITE_TRANSIENT);
        }
        sqlite3_bind_int(sqlStatement, 11, 1);
        sqlite3_prepare_v2(newDb, sql, 1, &sqlStatement, NULL);
        if (sqlite3_step(sqlStatement) == SQLITE_OK) {
            NSLog(@"client ajouté");
        } else{
            NSLog(@"Echec d'ajout");
        }
        sqlite3_step(sqlStatement);
        sqlite3_finalize(sqlStatement);
        sqlite3_close(newDb);
    };

}

我注意到这个步骤与&#34; SQLITE_OK&#34;不同。

显示信息的方法

- (void)viewDidLoad
{
    infoCustomer = [[CustomerDAO alloc] init];
    if([[infoCustomer getCurrentCustomer] count] > 0){
        self.customer = [[infoCustomer getCurrentCustomer] objectAtIndex:0];

        [self.uniqueId setText:self.customer.uniqueId];
        [self.name setText:self.customer.name];
        [self.sex setText:self.customer.sex];
        [self.tall setText:self.customer.tall];
        [self.weight setText:self.customer.weight];
        [self.age setText:self.customer.age];
        [self.address setText:self.customer.address];
        [self.tel setText:self.customer.tel];
        [self.email setText:self.customer.email];
    } else{
        NSLog(@"customer not read");
        [self.uniqueId setText:@"Go to Update."];
        [self.name setText:@""];
        [self.sex setText:@""];
        [self.tall setText:@""];
        [self.weight setText:@""];
        [self.age setText:@""];
        [self.address setText:@""];
        [self.tel setText:@""];
        [self.email setText:@""];
    }
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
  

编辑:

     

我从昨天开始继续我的研究,虽然有些不对劲   我的源代码:

sqlite3_prepare_v2(newDb, sql, 1, &sqlStatement, NULL);
     

第三个参数必须更改为-1,因为它定义了   我的要求的长度。我用了一些教程来学习sqlite   请求,我没有真正花时间去理解所有的   我看到的参数。如果将其定义为-1,则表示长度将为   在运行时自动计算。

     

我觉得因为这么多错误而失去这么多时间感到很沮丧   如何没有足够的经验或没有外部工作是如何工作的   意见。

0 个答案:

没有答案