2009-06-02 10 views
4

レコードが作成された後、アプリケーションでNSDateとして取得して保存できるときに、テーブルにタイムスタンプを自動的に保存する手段がsqliteにありますか?iphone NSdateを使用したsqlite datetimeデータ型?

代わりに、私のiPhoneアプリに現在の時刻でNSdateオブジェクトを作成し、それをデータベースに挿入する必要があります。もしそうなら?その列のデータ型はどのような列にする必要がありますか? DATETIME?

答えて

8

SQLiteで使用できるTIMESTAMPデータ型がないため、INSERTを手動で挿入する必要があります。私は、データベース内のINTEGERデータ型を使用し、そのように私のNSDateを変換:

sqlite3_bind_double(insert_statement, 1, [myDate timeIntervalSince1970]); 

そしてDBの外にそれを取り戻すために:

myDate = [NSDate dateWithTimeIntervalSince1970:sqlite3_column_double(select_statement, 1)]; 
+0

私は怖い、これは間違っている、datetimeデータ型は、SQLiteのであります。 – Thiru

21

は、私は何をすることになりますた(使用sqliteののCURRENT_TIMESTAMPです次のようなものです:2009-06-16 12:11:24)。これを行うにはちょうど次に、このようにSQLクエリを使用

Data type: "DATETIME" 
Allow null: NO 
Default value: CURRENT_TIMESTAMP 

にごqsliteテーブルの行タイプを設定します。それは自動的に現在時刻の値を取得するように

@"INSERT INTO 'scores' ('one', 'two', 'three') VALUES ('%d', '%d', '%d')" 

は、日付を無視します。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //this is the sqlite's format 
NSDate *date = [formatter dateFromString:score.datetime]; 

、今あなたがNSDateオブジェクトとしてその日付を持っている:そして、あなたはこのようNSDateFormatterを使用することができますNSDateにこれを変換する

。これはfoo.currentDateに浮動小数点値を挿入することになる

insert into foo(currentDate) values (julianday('now')); 

:ちょうど私たちは、私は同じように、sqliteのユリウス通日()関数を使用したい:)

関連する問題