删除sqlite3数据库iOS 7中的所有记录

时间:2014-03-21 05:00:59

标签: ios iphone ios7 sqlite delete-row

在我的应用程序中,我已将数据存储在 sqlite3 数据库中,并将所有 sqlite3 数据库上传到我的在线服务器,一旦复制到我的服务器,我想删除我存储在本地数据库中的所有记录。

我有两个视图控制器第一个视图控制器,我将数据存储到 sqlite3 第二个视图控制器我用来将数据加载到我的服务器我已经给出了如果用户连接到网络它有上传数据。

我想在将数据上传到我的服务器之后想要删除本地数据库中的所有记录。

我已经尝试了一些不起作用的方法,请告诉我如何解决这个问题。

- (void) Delete_LoginData 
{
    if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK)
    {
        const char *sql = "DELETE * FROM reg";
        sqlite3_stmt *statement;
        if(sqlite3_prepare_v2(db, sql,-1, &statement, NULL) == SQLITE_OK)
        {
            sqlite3_reset(statement);
        }
     }
}

我在Reachability

中调用了此功能
- (BOOL)reachable
{
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.google.com"];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];

    if(internetStatus == NotReachable) 
    {    
    }
    else
    {
        [self Delete_LoginData];
    }

    return YES;
}   

我的文件路径。

- (NSString *) filePath
{
    NSArray *paths = filepath, YES);

    return [[paths objectAtIndex:0] stringByAppendingPathComponent:@"bp.sqlite"];
}

代码打开数据库。

- (void)openDB
{
    if (sqlite3_open([[self filePath] UTF8String], &db)!=SQLITE_OK)
    {
        sqlite3_close(db);
        NSAssert(0, @"Database failed to open");
    }
    else
    {
        NSLog(@"database opened");
    }
}

我已经使用上面的方法从我的本地数据库中删除了记录,但是我正在做错了。

感谢。

3 个答案:

答案 0 :(得分:2)

使用sqlite3_step代替sqlite3_reset来执行查询

if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK)
{
    const char *sql = "DELETE FROM reg";
    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(db, sql,-1, &statement, NULL) == SQLITE_OK)
    {
       if(sqlite3_step(statement) == SQLITE_DONE){
       // executed
       }else{
         //NSLog(@"%s",sqlite3_errmsg(db))
       }
    }
    sqlite3_finalize(statement);
}
sqlite3_close(db);

答案 1 :(得分:0)

sqlite3_prepare_v2没有执行任务你需要迈出一步

if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK){
    NSString *sql = "DELETE  FROM reg";
    const char *query_st = [sql UTF8String];

    if(sqlite3_prepare_v2(database, query_st, -1, &statement, NULL) == SQLITE_OK){
        // Loop through the results and add them to the feeds array
        if(sqlite3_step(statement) == SQLITE_DONE) {
            // Deleted records,....
        }else{
             NSAssert1(0,@"Error when counting rows  %s",sqlite3_errmsg(database));
        }
        sqlite3_finalize(statement);
    }
    sqlite3_close(database);
}

答案 2 :(得分:0)

你可以这样做,

sqlite3_stmt *statement;
- (void) Delete_LoginData 
{
   // Open database first
   if(sqlite3_open([self.filePath UTF8String], &db) == SQLITE_OK)
   {
      // Sql query
      const char *sql = "DELETE FROM reg";
      // We are preparing the statement here
      if(sqlite3_prepare_v2(db, sql,-1, &statement, NULL) == SQLITE_OK)
      {
          // If that prepared statement is OK then we can execute that statement
          if(sqlite3_step(statement) == SQLITE_DONE)
          {
              NSLog(@" Records deleted successfully..");
          }
          else
          {
              NSLog(@" Opppsss..... Unable to delete records..");
          }
      }
      // Finalizing the statement
      sqlite3_finalize(statement);
      // Closing the database
      sqlite3_close(db);    
}

希望这对你有用......

谢谢...