2012-09-20 136 views
0

我想在android设备上插入值到sqlite数据库。插入SQLite错误

但是有时以下错误被抛出:

android.database.sqlite.SQLiteException: near ",": syntax error: , while compiling: INSERT INTO sensor_event (created_at, updated_at, type, x, y, z, time) VALUES (?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?) 

不幸的是我不知道为什么查询是不会通过。还有谁?

干杯,

戈登

+2

你是什么意思 “有时”,它的作品偶尔是什么意思?它何时起作用,有什么不同?你可以在你的问题中发布你的插入方法吗? – jnthnjns

+0

aparrently是的。该查询会自动生成(插入多少个条目)。查询有时会崩溃,但长度与崩溃无关。 – GordonHo

+0

顺便说一句,在Android中对数据库方法进行基准测试后,我支持这样的想法,即生成如此长的插入内容比传统方法更容易出错并且速度更慢 - 您可以在这里查看我的代码:https://code.google.com/p/gdg-sofia-prototypes/source/browse /#svn%2Ftrunk%2FAndroidPersistenceBenchmark –

回答

5

您提供的不是一个有效的sqlite的语法。 SQLite对单指令中的多个插入有一定的支持,但它以稍微不同的方式完成。见here

如何生成您的查询以及在您的问题中有时意味着什么 - 对我而言,每次尝试这样的查询时都会发生错误。

重写查询,如下所示:

INSERT INTO sensor_event 
SELECT ? as created_at, ? as updated_at, ? as type, ? as x, ? as y, ? as z, ? as time 
UNION SELECT ?, ?, ?, ?, ?, ?, ? 
UNION SELECT ?, ?, ?, ?, ?, ?, ? 
UNION SELECT ?, ?, ?, ?, ?, ?, ? 
UNION SELECT ?, ?, ?, ?, ?, ?, ? 
UNION SELECT ?, ?, ?, ?, ?, ?, ? 
+0

afaik sqlite目前支持前面提到的语法。但链接是相当有帮助的。我会尝试包括一个版本检查使用哪种语法。它会使速度差异使用哪种语法? – GordonHo

+0

@GordonHo - 我个人不知道是否会有时差。事实上,支持的语法的事实对我来说也是新的。我会很乐意看到你的调查结果。请将它们添加到线程中。 –

+0

我会做的。希望我能设法在下周挤压它。同时下面的链接也很有帮助。 Android版本中的SQLite版本: http://stackoverflow.com/questions/2421189/version-of-sqlite-used-in-android – GordonHo

0

SQLite的允许,因为版本鲍里斯Strandjev提到4.1 早期版本会失败,因为版本复合插入语句3.7.11

Android使用3.7.11。

的SQLite版本的Android版本:0​​Version of SQLite used in Android?