0

テーブル「カテゴリ」に挿入しようとしている2つの文字列があります。文字列は「updatedAt」と「createdAt」です。私はそれらを単純な日付形式の文字列として持っています:

SimpleDateFormat mSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

時刻にコロンが含まれているため、エラーが発生します。少なくとも私はそれが起こっていると信じています。ここに私の挿入コードがあります:

public void insertCategories(SQLiteDatabase db, int id, String group, String updatedAt, String createdAt){

        String CATEGORY_INSERTION = 
            "insert into " + DATABASE_USERTAG + "(" + KEY_TAGID + ", " + KEY_TAGNAME + ", " + KEY_UPDATED_AT_TAG + ", " + KEY_CREATED_AT_TAG +") " +
            "values(" + id + ", " + group + ", " + updatedAt + ", " + createdAt +");";
        db.execSQL(CATEGORY_INSERTION);
    }

logcat の出力は次のとおりです。

    04-20 12:10:38.489: E/Database(629): Failure 1 (near "12": syntax error) on 0x1b8268 when preparing 'insert into UserTag(_id, tagName, udpatedAtTag, createdAtTag) values(1, 'Favorites', 2013-04-20 12:10:38, 2013-04-20 12:10:38);'.
    04-20 12:10:38.519: W/dalvikvm(629): threadid=9: thread exiting with uncaught exception (group=0x40015560)
    04-20 12:10:38.529: E/AndroidRuntime(629): FATAL EXCEPTION: ModernAsyncTask #1
    04-20 12:10:38.529: E/AndroidRuntime(629): java.lang.RuntimeException: An error occured while executing doInBackground()
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.lang.Thread.run(Thread.java:1019)
    04-20 12:10:38.529: E/AndroidRuntime(629): Caused by: android.database.sqlite.SQLiteException: near "12": syntax error: insert into UserTag(_id, tagName, udpatedAtTag, createdAtTag) values(1, 'Favorites', 2013-04-20 12:10:38, 2013-04-20 12:10:38);
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at mcbee.recipeBoXx.honeyComb.RecipeDbAdapterMod$DatabaseHelper.insertCategories(RecipeDbAdapterMod.java:180)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at mcbee.recipeBoXx.honeyComb.RecipeDbAdapterMod$DatabaseHelper.onCreate(RecipeDbAdapterMod.java:160)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at mcbee.recipeBoXx.honeyComb.RecipeDbAdapterMod$DatabaseHelper.onUpgrade(RecipeDbAdapterMod.java:173)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at mcbee.recipeBoXx.honeyComb.CategoryContentProvider.query(CategoryContentProvider.java:88)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.content.ContentProvider$Transport.query(ContentProvider.java:187)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.content.ContentResolver.query(ContentResolver.java:262)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:35)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123)
    04-20 12:10:38.529: E/AndroidRuntime(629):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
    04-20 12:10:38.529: E/AndroidRuntime(629):  ... 4 more

また、単純な日付形式を次のように変更すると:

SimpleDateFormat mSdf = new SimpleDateFormat("yyyy-MM-dd");

エラーはありません。時間を含むようにこの文字列を適切にフォーマットするにはどうすればよいですか?

編集:考え出した、これを考えるべきだった...単純な日付形式を次のように変更しました:

SimpleDateFormat mSdf = new SimpleDateFormat("yyyy-MM-dd HH':'mm':'ss");
4

2 に答える 2

0

時間をミリ秒として保存します。次に、データを取得するには、ミリ秒の時間を長い値として取得し、計算を行ってフォーマットされた時間に変換します。

于 2013-04-21T03:33:31.960 に答える
0

文字列の周りの「引用符」を忘れました。

次のようなものを使用できます。

... ", '" + createdAt + "', '" + ...

しかし、すべてを処理する挿入関数を使用する方がはるかに簡単です。

ContentValues cv = new ContentValues();
cv.put(KEY_TAGID, id);
cv.put(KEY_TAGNAME, group);
cv.put(KEY_UPDATED_AT_TAG, updatedAt);
cv.put(KEY_CREATED_AT_TAG, createdAt);
db.insert(DATABASE_USERTAG, null, cv);
于 2013-04-21T09:37:26.133 に答える