0

エラーが発生し続けており、悲しいことに、何が間違っているのかわかりません。tripname、、、、、、およびtimestampを挿入latするステートメントが必要longiです。データベースを作成しましたが、正常な SQL ステートメントを作成できません。助けてくださいaccuracyspeed

これが私のコードです:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    NSString *databaseDir;
    NSArray *dirPath;
    //get the documents path
    dirPath= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    databaseDir =[dirPath objectAtIndex:0];
    databasePath=[[NSString alloc]initWithString: [databaseDir stringByAppendingPathComponent:
                                                   @"deathTrail.db" ]];
    sqlite3_stmt *statement;
    const char *dbpath=[databasePath UTF8String];
    if (sqlite3_open(dbpath, &deathTrail)==SQLITE_OK){

        NSString *sql_stmt1=[[NSString alloc] initWithFormat:@"INSERT VALUES INTO LOCATION_POINTS (LATITUDE, LONGITUDE) VALUES (\"%d\", \"%d\")",  newLocation.coordinate.latitude, newLocation.coordinate.longitude];

        const char *insertstmt=[sql_stmt1 UTF8String];
        sqlite3_prepare_v2(deathTrail, insertstmt, -1, &statement,NULL);
        if(sqlite3_step(statement)==SQLITE_DONE) {
            status.text=@"it worked";
        } else {
            status.text=@"it failed";
        }
        sqlite3_finalize(statement);
        sqlite3_close(deathTrail);
    }
}
4

2 に答える 2

0

これはもう解決しましたか?

そうでない場合は、ここでもう 1 つ確認することがあります。アプリで以前に SELECT ステートメントを実行し、sqlite3_finalize(statement); を含めるのを忘れた場合。その場合、insert ステートメントは機能しません。SQL エラー メッセージをログアウトすると、「データがロックされています」と表示されます。より多くの SELECT ステートメントを実行することはできますが、ファイナライズ ステートメントがどこかに 1 つ欠けているだけで、INSERTS が壊れてしまいます。

于 2012-08-21T14:20:03.857 に答える
0
  1. sqlite3_prepare_v2コマンドの結果も確認する必要があります。

  2. それまたはsqlite3_step失敗した場合は、結果を確認して、sqlite3_errmsg何が失敗したかを確認する必要があります (この場合、上記のコードには明らかな問題がないため、テーブルが存在しないためだと思います)。

  3. 一般に、データベースを開こうとするときにデータベースが存在することがわかっている場合は、sqlite_open_v2(eg sqlite3_open(dbpath, &deathTrail, SQLITE_OPEN_READWRITE, NULL)) を使用して、空のデータベースが作成されないようにする必要があります。または、データベースを作成したい場合は、そのままにしておいてください。ただし、テーブルがまだ存在しない場合はsqlite3_open、適切な SQL ステートメントを実行していることを確認してください。CREATE TABLE

  4. 空のデータベースが誤って作成されたと思われる場合は、シミュレーターをリセットするか、プログラムを削除して再インストールし、空のデータベースが削除されることを確認してください。

  5. バンドルのデータベースを読み書きに使用する予定がある場合は、プログラムでバンドルからドキュメント フォルダーにデータベースをコピーしてください。

于 2012-08-20T17:47:43.797 に答える