2012-01-11 7 views
1

私のiPhoneアプリケーションでsqliteデータベースのいくつかのエントリを削除しようとしていますが、奇妙なエラーが発生しています。Objective CのSqliteエラー

if(sqlite3_open([databasePath UTF8String], &yerocDB)==SQLITE_OK) 
{ 
    sqlite3_stmt *compiledstatement; 

    NSString *deleteSql=[NSString stringWithFormat: @"delete from Favorites_Table where playlist_name = Studying and date = 1/1/2012"]; 
    const char *sqlstmt = [deleteSql UTF8String]; 

    if(sqlite3_prepare_v2(yerocDB, sqlstmt, -1, &compiledstatement, NULL)==SQLITE_OK) 
    { 
     int result = sqlite3_step(compiledstatement); 

     if(SQLITE_DONE != result) 

      NSAssert1(0,@"Error while creating delete statement => %s",sqlite3_errmsg(yerocDB)); 
    }else{ 
     NSLog(@"didn't delete error: %s", sqlite3_errmsg(yerocDB)); 
    } 
    sqlite3_finalize(compiledstatement); 
} 

が、その後、私はエラーを取得する:ここで

は私のコードです

didn't delete error: no such column: Studying 

PLAYLIST_NAMEと日付が私の列です...なぜそれが「学ぶこと」ではないと言っていますカラム?

答えて

4

Studyingを一重引用符で囲む必要があります。そしてあなたの日付。

この:

delete from Favorites_Table 
where playlist_name = Studying and date = 1/1/2012 

はこのことする必要があります

delete from Favorites_Table 
where playlist_name = 'Studying' and date = '2012-01-01' 

理由は、あなたが一重引用符でそれを入れていない場合、パーサはそれが列名だと思うだろうということです。最初のクエリでFavorites_Tableから削除しようとしていましたが、playlist_nameの列はStudyingの列と等しくなりました。それ以来あなたのエラーは、 "そのような列はありません。

そして、勉強の周りの引用符を修正すると、あなたの日付もエラーを投げてしまうでしょう。日付はISO形式(yyyy-mm-dd)を使用して比較します。経験則として、ローカライズされたmm/dd/yyyyまたはdd/mm/yyyy形式は使用しないでください。

関連する問題