这里有一个类似的问题,但我的情况不同。
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()的参数。
关于错误原因的任何想法?
答案 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卡上的某些文件?