0

ここに同様の質問がありますが、私の状況は異なります。

07-13 13:03:11.460: E/SQLiteDatabase(6268): Error inserting 2=Fri Jul 13 13:03:10   EDT 2012 WebView is exiting 1=Fri Jul 13 13:02:53 EDT 2012 Registering Device for Notifications 0=Fri Jul 13 13:02:41 EDT 2012 Device passed GCM requirements test

07-13 13:03:11.460: E/SQLiteDatabase(6268): android.database.sqlite.SQLiteException: near "2": syntax error: , while compiling: INSERT INTO log(2,1,0) VALUES (?,?,?)

ContentValues に渡された単純な文字列値を挿入しようとしています。

LogOpenHelper helper = new LogOpenHelper(this);
ContentValues values = new ContentValues();
for (int i = 0; i < logReporter.getSize(); i++) {
        values.put(i + "", temp[i]);
    }
helper.getWritableDatabase().insert(TABLE_NAME, null, values);
    helper.close();

    cursor.close();

上記の for ループは、すべてのログ メッセージを string[] から取り出します。データベースに常時アクセスする必要がないため、string[] はアプリケーション全体で埋められます。デバッグのための起動時とシャットダウン時の挿入とクエリのみ

Date + a Stringのインスタンスを挿入しようとしている文字列。欠落している sqlite パーサーで許可されていない特定の文字シーケンスはありますか? そのタイプのオブジェクトは、insert() を呼び出すパラメーターであるため、ContentValues を使用する必要があります。

エラーの理由についてのアイデアはありますか?

4

2 に答える 2

0

書かれているように、動的な列数で行を挿入していますが、その数はlogReporter.getSize()に依存します...それはおそらくあなたが望むものではありません。

次のコマンドでテーブルを作成したと仮定します。

CREATE TABLE logtable (_id INTEGER PRIMARY KEY AUTOINCREMENT, log_message_column TEXT);

次のようなことを試してください。

SQLiteDatabase database = helper.getWritableDatabase();

for (String logMessage: logReporter) {
    values.put("log_message_column", logMessage);
    database.insert("logtable", null, values);
}

helper.close()

次に、ログメッセージがテーブルlogtableのlogMessageに表示されます。

しかし、なぜログにデータベースを使用するのでしょうか。単純なLog.d()を使用したり、SDカード上のファイルにログを書き込んだりしないのはなぜですか?

于 2012-07-13T19:56:14.153 に答える
0

適切に挿入するには、メソッドの最初の引数として列の名前を渡す必要がありますvalues.put()

于 2012-07-13T18:50:30.343 に答える