我的平板电脑Android 4.0.3v中存在Sqlite问题;
错误:
07-28 14:28:18.495 6995-7125/com.titan.tablet E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-544
android.database.sqlite.SQLiteException: near ",": syntax error: , while compiling: INSERT INTO tb_ingrediente ( ID_INGREDIENTE , DESCRICAO , ATIVO , UNIDADE ) VALUES
(1, 'CARNE', 1, 'UN'),
(2, 'QUEIJO', 1, 'UN'),
(3, 'PRESUNTO', 1, 'UN'),
(4, 'OVO', 1, 'UN'),
(5, 'FARINHA', 1, 'UN'),
(6, 'SALADA', 1, 'UN'),
(7, 'CEBOLA', 1, 'UN'),
(8, 'COCA-COLA 2L', 1, 'UN'),
(9, 'ÓLEO', 1, 'UN'),
(10, 'TOMATE', 1, 'UN');
在我的手机Android 4.1.2中,这个问题不会发生。
插入代码:
db.execSQL("INSERT INTO tb_ingrediente ( ID_INGREDIENTE , DESCRICAO , ATIVO , UNIDADE ) VALUES\n" +
"(1, 'CARNE', 1, 'UN'),\n" +
"(2, 'QUEIJO', 1, 'UN'),\n" +
"(3, 'PRESUNTO', 1, 'UN'),\n" +
"(4, 'OVO', 1, 'UN'),\n" +
"(5, 'FARINHA', 1, 'UN'),\n" +
"(6, 'SALADA', 1, 'UN'),\n" +
"(7, 'CEBOLA', 1, 'UN'),\n" +
"(8, 'COCA-COLA 2L', 1, 'UN'),\n" +
"(9, 'ÓLEO', 1, 'UN'),\n" +
"(10, 'TOMATE', 1, 'UN');" );
有人可以帮我发现为什么错误只发生在android 4.0.3中吗?
答案 0 :(得分:0)
插入值时,一次只能插入一条记录。没有办法用单个语句批量插入多个记录。如果您要进行大量插入操作,则可以缓存所有插入语句并一次性提交它们以使该过程更快。
db.beginTransaction();
try {
db.execSQL("delete from " + Table);
int Xtra = cols.getColumnCount() - tabledata.get(0).size();
for (ArrayList<String> item : tabledata) {
for (int a=0;a<Xtra;a++) {item.add("");}
db.execSQL("insert into " + Table + " values " + rowValues(item) + ";");
}
db.setTransactionSuccessful();
} catch (Exception e) {
Log.e("DBWrapper", "insertArrayList error: " + e.getMessage());
} finally {
db.endTransaction();
}
答案 1 :(得分:0)
VALUES
中的多行语法仅在sqlite version 3.7.11中引入:
增强INSERT语法,允许通过VALUES子句插入多行。
4.0.x ICS设备usually ship with sqlite 3.7.4。
要解决此问题,请将插入一次拆分为一行,并使用事务处理性能,如Scott的答案,或使用SELECT ... UNION ALL
,如下所示:
INSERT INTO tb_ingrediente ( ID_INGREDIENTE , DESCRICAO , ATIVO , UNIDADE )
SELECT 1, 'CARNE', 1, 'UN' UNION ALL
SELECT 2, 'QUEIJO', 1, 'UN'
...