2010年10月6日水曜日

Android開発 - SQLiteでの日付型データ保存

現在開発中のアプリにおいて、SQLiteデータベースにデータの更新日時を保存したいのですが、
下記のように標準のSQLiteDatabaseライブラリのインサートメソッドを使うと、

ContentValuesvalues = new ContentValues();
values.put("datetime", "datetime('now', 'localtime')");
db.insert("tablename", null, values);

 datetime('now', 'localtime')がそのまま文字列として保存されてしまいます。
(SQLiteには日付のデータ型は存在しないためdatetimeカラムはTEXT型

おそらくライブラリがString型の変数に対して " " で囲ってSQLを発行するためと思われます。

 回避策として、

String sql  =  "INSERT INTO tablename" +
                       "(datetime) " +
                       "VALUES(datetime('now', 'localtime'));";
db.execSQL(sql);

といった形で直接SQLを記述して実行するとうまくいきました。

なんだか納得行かないのでメモ書き。