-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

const char*sqlを変更します

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

これで上記を変更

const char *sql = "DELETE FROM Login";
于 2012-11-06T09:00:44.453 に答える
1

書くconst char *sql = "DELETE FROM Login"; それ以外のconst char *sql = "DELETE * FROM Login";

于 2012-11-06T08:49:55.380 に答える
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);
             }       
         }
}

あなたのコードでは、データベースを 2 回開いています。2 番目の方法では、すでに開いているデータベースを開いています。それが実際の問題かどうかはわかりませんが、これを行わないことをお勧めします。

于 2012-11-06T08:48:46.070 に答える
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 に答える