-2

编辑:-这就是我的工具:-

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

我想一键删除数据库中的所有行。我实现了以下方法:-

- (void) Delete_LoginData {
        sqlite3 *database;
        if(sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK) {
            const char *sql = "DELETE * FROM Login";
            sqlite3_stmt *statement;

            statement = [self PrepareStatement:sql];    
          //  int a1 = sqlite3_bind_int(statement, 1, 1);

            sqlite3_step(statement);
            sqlite3_reset(statement);
        }       
    }

    -(sqlite3_stmt*) PrepareStatement:(const char *)sql{
        // Setup the database object
        sqlite3 *database;
        // Init the animals Array

        // Open the database from the users filessytem
        if(sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK) {
            // Setup the SQL Statement and compile it for faster access
            const char *sqlStatement = sql;
            sqlite3_stmt *compiledStatement;

            if(sqlite3_prepare_v2(database, sqlStatement,-1, &compiledStatement, NULL) == SQLITE_OK) {
                //NSLog(@"COMPILED STATEMENT: %@",compiledStatement);
                return compiledStatement;

            }
        }
        return nil;
    }

但它不起作用。我得到这个语句的 0X0 = [self PrepareStatement:sql]; 在 delete_logindata 方法中。

如何解决这个问题。有什么解决方案吗?

4

4 回答 4

1

请更改您的方法,例如:

- (void) Delete_LoginData
{
        sqlite3 *database;
        if(sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK)
        {
            const char *sql = "DELETE FROM Login";
            sqlite3_stmt *statement;
             if(sqlite3_prepare_v2(database, sql,-1, &statement, NULL) == SQLITE_OK)
             {
               sqlite3_step(statement);
             }       
         }
}

在您的代码中,您打开数据库两次。在第二种方法中,您正在打开一个已经打开的数据库!我不知道这是否是实际问题,但我建议不要这样做。

于 2012-11-06T08:48:46.070 回答
1

const char *sql = "DELETE FROM Login";代替const char *sql = "DELETE * FROM Login";

于 2012-11-06T08:49:55.380 回答
1

改变你的 const char*sql

const char *sql = "DELETE * FROM Login";

用这个改变上面

const char *sql = "DELETE FROM Login";
于 2012-11-06T09:00:44.453 回答
0

我不知道它的正确答案是什么。但我可以建议你这个链接 http://klanguedoc.hubpages.com/hub/IOS-5-SDK-Database-Insert-Update-Delete-with-SQLite-and-Objective-CC-How-To 可能会帮助你。

于 2012-11-06T10:02:01.123 回答