lantianyiming 2013-07-11 06:03 采纳率: 0%
浏览 1151

SQLite添加项目到数据库

动态添加项目到SQlite数据库失败:

-(void) addPatientToDatabase:(Patient *)newPatient {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"cities.sqlite"];    
    sqlite3 *database;
    if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
        const char *sqlStatement = "insert into patients (firstName, surname, dob, homeNumber, mobileNumber, email, address, image) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            sqlite3_bind_text(compiledStatement, 1, [newPatient.patientName UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 2, [newPatient.patientSurname UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 3, [newPatient.patientDoB UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 4, [newPatient.patientHomeNumber UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 5, [newPatient.patientMobileNumber UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 6, [newPatient.patientEmail UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 7, [newPatient.patientAddress UTF8String], -1, SQLITE_TRANSIENT);
            NSData *dataForPicture = UIImagePNGRepresentation(newPatient.patientPicture);
            sqlite3_bind_blob(compiledStatement, 8, [dataForPicture bytes], [dataForPicture length], SQLITE_TRANSIENT);
        }
        if(sqlite3_step(compiledStatement) == SQLITE_DONE) {
            sqlite3_finalize(compiledStatement);
        }
    }
    sqlite3_close(database);
}

如果在if语句中有断点就添加一些断点和记号:

if(sqlite3_step(compiledStatement) == SQLITE_DONE) {

但是没有挑选,谢谢。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-05 14:19
    关注

    看起来你的代码是在尝试向一个 SQLite 数据库中的 "patients" 表插入一条新记录。


    在这个方法中,你首先打开了一个数据库连接,然后准备了一条 SQL INSERT 语句,并使用 sqlite3_bind_* 函数绑定了该语句的参数。


    最后,你使用了 sqlite3_step 函数来执行这条语句。如果该函数返回 SQLITE_DONE,则意味着语句成功执行。


    如果你的插入操作失败,那么可能是因为以下原因之一:

    • 数据库连接打开失败

    • SQL 语句准备失败

    • 参数绑定失败

    • 执行语句失败

    要确定哪个原因导致了失败,你可以检查相应的函数调用的返回值,并根据需要调试代码。


    此外,如果你希望在插入操作失败时获得更多信息,你还可以使用 sqlite3_errmsg 函数来获取错误消息。

    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R