Android SQlite插入语法错误
问题描述:
这里有一个类似的问题,但我的情况是不同的。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的简单字符串值。
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循环只是将所有日志消息从字符串[]中取出。字符串[]填充整个应用程序,因为我不需要不断的数据库访问。只是插入和查询在启动和关机调试
我试图插入日期+字符串的实例的字符串。是否有一个字符序列是不允许在我错过的sqlite解析器中?我必须使用ContentValues,因为该类型的对象是调用insert()的参数。
任何想法为什么错误?
答
为了正确插入,您必须在方法values.put()
中传递列的名称作为第一个参数。
答
正如你所写的插入行,动态数列,其数量取决于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-13 19:59:26
我认为,你也有兴趣在appcrash上获取StackTrace ...这也可以通过调用[** Thread.setDefaultUncaughtExceptionHandler()**](http:/ /developer.android.com/reference/java/lang/Thread.html#setDefaultUncaughtExceptionHandler%28java.lang.Thread.UncaughtExceptionHandler%29)在你的主线程上执行你自己的exceptionHandler ...但这是另一个问题的主题已经在StackOverflow的某个地方问过了 – Prizoff 2012-07-13 20:04:24