多个插入SQLite android错误

时间:2015-08-19 17:48:48

标签: android sqlite

我试图在我的应用程序中执行多个INSERT。我收到以下错误:

Caused by: android.database.sqlite.SQLiteException: unrecognized token:   "5EA7120651D575A3C3A75A13" (code 1): , while compiling: 

INSERT INTO 'Inscripciones' ('hash','codigo_evento','ticket','nombre','inscripcion_id','validado','sincronizado','numero','asiento','otros','adicionales','categoria','codigo_usuario','codigo_usuario','rut','talla','fecha_validacion','nombre_responsable') VALUES (5EA7120651D575A3C3A75A13,SI-AAA,Platea alta,Nicolas Hernandez,943,0,0,null,null,null,null,null,SI-1,181148497,null,false,null),(DE1FB0B4E28D4A066C89D27A,SI-AAA,Cancha VIP,Felipe Meric,945,0,0,null,Fila C - Asiento 10,null,null,null,SI-1,169428247,null,false,null),(F7C367C829DA0279AEA19512,SI-AAA,Cancha VIP,Felipe Meric,946,0,0,null,Fila C - Asiento 11,null,null,null,SI-1,169428247,null,false,null),(3FEF96BD38512533B68489A1,SI-AAA,Cancha VIP,Felipe Meric,947,0,0,null,Fila C - Asiento 12,null,null,null,SI-1,169428247,null,false,null),(8E20DBE8DBA3D6A9E267098D,SI-AAA,Cancha VIP,Felipe Meric,948,0,0,null,Fila C - Asiento 13,null,null,null,SI-1,169428247,null,false,null),

我不明白错误,我正确地看到了查询。

 String insertRows = "INSERT INTO 'Inscripciones' ('hash','codigo_evento','ticket','nombre','inscripcion_id','validado','sincronizado','numero','asiento','otros','adicionales','categoria','codigo_usuario','codigo_usuario','rut','talla','fecha_validacion','nombre_responsable') VALUES";
 for (int i = 0; i < array.length(); i++) {
      recorrido++;
      JSONObject rowParticipante = array.getJSONObject(i);
      insertRows += "("+rowParticipante.getString("hash")+"," 


                       +rowParticipante.getString("codigo_evento")+","
                       +rowParticipante.getString("ticket")+","
                       +rowParticipante.getString("nombre")+","
                       +rowParticipante.getString("inscripcion_id")+","
                       +rowParticipante.getInt("validado")+","
                       +0+","
                       +rowParticipante.getString("numero")+","
                       +rowParticipante.getString("asiento")+","
                       +rowParticipante.getString("otros")+","
                       +rowParticipante.getString("adicionales")+","
                       +rowParticipante.getString("categoria")+","
                       +codigoUser+","
                       +rowParticipante.getString("rut_clean")+","
                       +rowParticipante.getString("talla")+","
                     +rowParticipante.getString("fecha_validacion")+","
                 +rowParticipante.getString("nombre_responsable")+"),";
}
db.execSQL(insertRows);

2 个答案:

答案 0 :(得分:1)

引号出现问题。

引号应该只是值而不是字段名称

示例:

INSERT INTO `Table` (`field`)
VALUES('value')

但是在您的代码中,您在字段中拥有它们,并且缺少值。 您可以选择使用后退标记来转义关键字,但没有引号。

最好使用insert()方法

实施例

SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();
values.put("hash", rowParticipante.getString("hash"));
values.put("codigo_evento", rowParticipante.getString("codigo_evento"));
values.put("ticket", rowParticipante.getString("ticket"));
values.put("nombre", rowParticipante.getString("nombre"));
values.put("inscripcion_id", rowParticipante.getString("inscripcion_id"));
values.put("validado", rowParticipante.getString("validado"));
values.put("sincronizado", rowParticipante.getString("sincronizado"));
values.put("numero", rowParticipante.getString("numero"));
values.put("asiento", rowParticipante.getString("asiento"));
values.put("otros", rowParticipante.getString("otros"));
values.put("adicionales", rowParticipante.getString("adicionales"));
values.put("categoria", rowParticipante.getString("categoria"));
values.put("codigo_usuario", rowParticipante.getString("codigo_usuario"));
values.put("rut", rowParticipante.getString("rut"));
values.put("talla", rowParticipante.getString("talla"));
values.put("fecha_validacion", rowParticipante.getString("fecha_validacion"));
values.put("nombre_responsable", rowParticipante.getString("nombre_responsable"));

db.insert("Inscripciones", null, values);
db.close();

答案 1 :(得分:0)

您需要在INSERT中围绕每个字符串值使用单引号,就像在每个列名称周围使用单引号一样。

但是,构建SQL的方法通常很糟糕,因为它可能导致SQL注入。您应该考虑使用参数化查询。