ios - 在 SQLite ios 中出现错误?

标签 ios objective-c sqlite

我正在使用 Storyboard构建一个 iOS 应用程序。我使用 SQLite 创建了一个表。

我在插入数据时遇到问题,向我显示了一个错误:

Failed to insert record  rc:1, msg=no such column: Afternoon

这是我的代码:

创建表代码:
char * query ="CREATE TABLE IF NOT EXISTS events (id INTEGER PRIMARY KEY AUTOINCREMENT, eventid  TEXT, addinfo TEXT,date TEXT,players TEXT, sportsname TEXT, Time TEXT,userid TEXT, venue TEXT)";

在表函数中插入:
-(int) insert:(NSString *)filePath withName:(NSString *)eventid addinfo:(NSString*)addinfo date:(NSString*)date 
players:(NSString*)players sportsname:(NSString*)sportsname Time:(NSString*)Time userid:(NSString*)userid  venue:(NSString*)venue {
    sqlite3* db = NULL;
    int rc=0;
    rc = sqlite3_open_v2([filePath cStringUsingEncoding:NSUTF8StringEncoding], &db, SQLITE_OPEN_READWRITE , NULL);

   if (SQLITE_OK != rc) {
       sqlite3_close(db);
       NSLog(@"Failed to open db connection");
   }
   else {
       NSString * query  = [NSString stringWithFormat:@"INSERT INTO events  (eventid,addinfo,date,players,sportsname,Time,userid,venue) 
                           VALUES (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",%@,\"%@\",\"%@\")", eventid,addinfo,date,players,sportsname,Time,userid,venue];

       char * errMsg;
       rc = sqlite3_exec(db, [query UTF8String] ,NULL,NULL,&errMsg);

      if (SQLITE_OK != rc) {
          NSLog(@"Failed to insert record  rc:%d, msg=%s",rc,errMsg);
      }
      sqlite3_close(db);
   }
   return rc;
}

获取记录功能
-(NSArray *) getRecords:(NSString*) filePath where:(NSString *)whereStmt {
    NSMutableArray * events =[[NSMutableArray alloc] init];
    sqlite3* db = NULL;
    sqlite3_stmt* stmt =NULL;
    int rc=0;
    rc = sqlite3_open_v2([filePath UTF8String], &db, SQLITE_OPEN_READONLY , NULL);

    if (SQLITE_OK != rc) {
        sqlite3_close(db);
        NSLog(@"Failed to open db connection");
    } else {
        NSString  * query = @"SELECT * from events";

        if(whereStmt) {
            query = [query stringByAppendingFormat:@" WHERE %@",whereStmt];
        }

        rc =sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
        if(rc == SQLITE_OK) {

            while (sqlite3_step(stmt) == SQLITE_ROW) //get each row in loop
            {
                NSString * eventid = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
                NSString *addinfo = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
                NSString *date = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
                NSString *players =[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 4)];
                NSString *sportsname =[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 5)];
                NSString *Time =[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 6)];
                NSString *userid =[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 7)];
                NSString *venue =[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 8)];
                NSDictionary *student = [NSDictionary dictionaryWithObjectsAndKeys:eventid,@"eventid",addinfo,@"addinfo",date,@"date",players,@"players",sportsname,@"sportsname",Time,@"Time",userid,@"userid",venue,@"venue",nil];

                [events addObject:student];
                NSLog(@"eventsid= %@, userid=%@ , sportsname= %@ , date= %@ , Time= %@,players= %@, venue= %@, addinfo=%@",eventid,userid,sportsname,date,Time,players,venue,addinfo);
            }
            NSLog(@"Done");
            sqlite3_finalize(stmt);
        }
        else {
            NSLog(@"Failed to prepare statement with rc:%d",rc);
        }
        sqlite3_close(db);
    }
    return events;
}  


NSData* data = [NSData dataWithContentsOfURL:url];
NSArray *ys_avatars = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"arrayyyyyy=%@",ys_avatars);

if(ys_avatars) {

for (int j=0;j<ys_avatars.count;j++) {
    int rc= [self insert:[self getDbFilePath] withName:ys_avatars[j][@"_id"] addinfo:ys_avatars[j][@"addinfo"] date:ys_avatars[j][@"date"] players:ys_avatars[j][@"players"] sportsname:ys_avatars[j][@"sportsname"] Time:ys_avatars[j][@"time"] userid:ys_avatars[j][@"userid"] venue:ys_avatars[j][@"venue"]];

    if(rc != SQLITE_OK) {
        [self showMessage:@"ERROR" withMessage:@"Failed to insert record"];      
    } 
    else
        [self showMessage:@"SUCCESS" withMessage:@"Record is added"];

    NSArray * events = [self getRecords:[self getDbFilePath] where:nil];          

最佳答案

您的问题将在之后得到解决,只需将这一行替换为

NSString * query  = [NSString
                         stringWithFormat:@"INSERT INTO events  (eventid,addinfo,date,players,sportsname,Time,userid,venue) VALUES (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",%@,\"%@\",\"%@\")",eventid,addinfo,date,players,sportsname,Time,userid,venue];


NSString * query  = [NSString
                             stringWithFormat:@"INSERT INTO events  (eventid,addinfo,date,players,sportsname,Time,userid,venue) VALUES (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")",eventid,addinfo,date,players,sportsname,Time,userid,venue];

关于ios - 在 SQLite ios 中出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27287288/

相关文章:

Android 6.0及以上版本卸载应用后不清除手机中的sqlite数据

c# - Entity Framework : Mapping existing one-to-many relationship to Model

ios - 无法查询 SecKeyChain 的身份

ios - 为什么 vimeo HTML 播放器会中断我的应用程序 Audio Session ?

c++ - 使用委托(delegate)在 C++ 类和 Objective-C 类之间进行通信?

ios - 如何在 objective-c 的AppDelegate中加载NSUserDefaults standardUserDefaults

objective-c - 如果我在从委托(delegate)访问我的 View 时得到 EXC_BAD_ACCESS,这是否意味着我有内存泄漏?

ios - 如何以编程方式从 UITableViewController 顺利过渡到 UIViewController

iphone - 是否有任何可用于 Objective-C 的测试 spy 库?

php - 如何将 JSON 对象发送到远程服务器并将该数据插入 MySQL 数据库