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[] 在整个应用程序中填充,因为我不需要持续的数据库访问。只需在启动和关闭时插入和查询以进行调试

我试图插入日期实例的字符串 + 一个字符串。我缺少的 sqlite 解析器中是否存在不允许的特定字符序列?我必须使用 ContentValues,因为该类型的对象是调用 insert() 的参数。

关于为什么会出现错误的任何想法?

4

2 回答 2

0

为了正确插入,您必须将列名作为方法中的第一个参数传递values.put()

于 2012-07-13T18:50:30.343 回答
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 回答