Android SQlite插入语法错误

时间:2012-07-13 18:37:19

标签: android sqlite

这里有一个类似的问题,但我的情况不同。

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的简单String值。

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循环只是将所有日志消息从字符串[]中取出。字符串[]在整个应用程序中填充,因为我不需要持续的数据库访问。只需在启动和关闭时插入和查询以进行调试

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

关于错误原因的任何想法?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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卡上的某些文件?