1

NSDatesを含むFMDBを介して実行するクエリは実行されますが、結果セットを返したり、データベースを編集したりすることはありません。iOS 4.3シミュレーターで作業しています。日付を指定しないその他のクエリは、正しく実行されます。これが私が使用するコードの抜粋です:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh-mm-ss"];

NSDate *start = [dateFormatter dateFromString:@"2011-07-18 06:40:21" ];
NSDate *end = [dateFormatter dateFromString:@"2011-07-18 06:41:19"];

[dateFormatter release];

FMDatabase* db = [FMDatabase databaseWithPath:appDelegate.databasePath];
if (![db open]) {
NSLog(@"Could not open db.");
}

[db beginTransaction];
[db executeUpdate:@"delete from time_stamp_table where time_stamp >= ? 
and time_stamp <= ?",start,end];

NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
[db commit];
[db close];

スキーマは、time_stamped_tableにtime_stampを次のように記述します。

create table time_stamp_table{
id INTEGER PRIMARY KEY,
time_stamp DATETIME NOT NULL
}

シミュレートされたアプリケーションコンテキストに保存されているデータベースを使用して、コマンドラインのsqlite3でこれらのクエリを実行すると、機能します。私が見逃しているFMDBを使用したNSDateによるクエリのための特別な準備はありますか?

4

3 に答える 3

1

次のようなクエリ

 SELECT *  from Time_Stamp where updatedTime >= DATE('2011-05-17 06:40:21') AND updatedTime <= DATE('2011-07-19 06:40:21')

日付を比較しながら正しいレコードをフェッチします。これからヒントを得て、クエリを次のように変更することができます

 [db executeUpdate:@"delete from time_stamp_table where time_stamp >= DATE(?) 
and time_stamp <= DATE(?)",start,end];

また

 [db executeQuery:[NSString stringwithFormat:@"delete from time_stamp_table where time_stamp >= DATE('%@') 
and time_stamp <= DATE('%@')",start,end];

私はクエリをテストしていないので、自分でテストする必要があります。それが役に立てば幸い

于 2011-07-19T04:19:08.530 に答える
0

NSDate を SQL クエリに解析しないようにしてください。むしろ、sqlite が理解できる形式で NSString を解析してみてください: '2011-07-18 06:41:19'。sqlite で値を比較したい場合は、特定の日付関数を使用する必要があります。Sqlite3 は、文字列を変換するためのDATE、TIME、または DATETIME関数を提供します。

第 2 に、Rahul Sharma を修正するために、TIMESTAMP は日付と時刻の両方を保存しているため、DATE 関数を使用して TIMESTAMP を比較すると失敗します。したがって、DATETIME 関数を使用する必要があります。

[db executeUpdate:@"delete from time_stamp_table where time_stamp >= DATETIME(?) 
                                                   and time_stamp <= DATETIME(?);",
                    @"2011-07-18 06:40:21",
                    @"2011-07-18 06:41:19"]; 
于 2011-07-24T15:54:22.127 に答える
0

メソッドを使用したことがあるかもしれませんexecuteQuery削除操作は更新操作に属します。最初は を使っexecuteQueryていたのですが、プロパティの型を何度も確認しても問題が見つかりませんでした。最後にexecuteUpdate修正します。

于 2016-09-30T02:55:33.793 に答える