几分钟前一切都很好,但突然停止工作并抛出奇怪的错误。例如,“我的表中没有列”,我将保留代码以查看是否可以提供帮助,实际上不会对此错误进行任何更改。
String sqlCreateBDEvent = "CREATE TABLE IF NOT EXISTS Evento (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, codigo_evento TEXT , nombre TEXT, codigo_usuario TEXT, folio TEXT, nombre_cliente TEXT)";
String sqlCreateBDInscripcion = "CREATE TABLE IF NOT EXISTS Inscripcion (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, hash TEXT, codigo_evento TEXT, ticket TEXT, nombre TEXT, inscripcion_id TEXT, validado int, sincronizado int, numero TEXT, categoria TEXT, codigo_usuario TEXT, rut TEXT, talla TEXT)";
private static TicketsBaseDatos sInstance;
public static TicketsBaseDatos getInstance(Context context) {
// Use the application context, which will ensure that you
// don't accidentally leak an Activity's context.
// See this article for more information: http://bit.ly/6LRzfx
if (sInstance == null) {
sInstance = new TicketsBaseDatos(context.getApplicationContext());
}
return sInstance;
}
public TicketsBaseDatos(Context ctx) {
super(ctx, "Eventrid", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sqlCreateBDEvent);
db.execSQL(sqlCreateBDInscripcion);
}
@Override
public void onUpgrade(SQLiteDatabase db, int versionAnterior, int versionNueva) {
//NOTA: Por simplicidad del ejemplo aquí utilizamos directamente la opción de
// eliminar la tabla anterior y crearla de nuevo vacía con el nuevo formato.
// Sin embargo lo normal será que haya que migrar datos de la tabla antigua
// a la nueva, por lo que este método debería ser más elaborado.
//Se elimina la versión anterior de la tabla
//db.execSQL("DROP TABLE IF EXISTS Inscripcion");
}
public void eliminarTablasBD(){
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DROP TABLE IF EXISTS Inscripcion");
db.execSQL("DROP TABLE IF EXISTS Evento");
db.close();
}
public void crearTablasBD(){
SQLiteDatabase db = getWritableDatabase();
db.execSQL(sqlCreateBDEvent);
db.execSQL(sqlCreateBDInscripcion);
db.close();
}
public void eliminarElementos(){
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DELETE FROM Inscripcion");
db.execSQL("DELETE FROM Evento");
db.close();
}
...
public void sincronizarBD(Context context, String codigoEvento) {
Connection cn = new Connection();
if(cn.isNetworkAvailable(context)){
SessionManager manager = new SessionManager();
folioEvento = manager.getValue(context,"folioEvento");
nombreCliente = manager.getValue(context,"nombreCliente");
codigoUser = manager.getValue(context,"codigoUser");
nombreUser = manager.getValue(context, "nombreUser");
hashUser = manager.getValue(context, "hashUsuario");
JSONParser jParser = new JSONParser();
try {
SQLiteDatabase db = TicketsBaseDatos.getInstance(context).getWritableDatabase();
do{
int recorrido = 0;
JSONObject json = jParser.getJSONFromUrl(Config.URL_BASE+nombreCliente+"/"+Config.URL_DESCARGA_BD+nombreUser+"/"+hashUser+"/"+folioEvento+"/"+start+"/"+cantidad);
JSONArray array = json.getJSONArray("Inscripciones");
for (int i = 0; i < array.length(); i++) {
recorrido++;
JSONObject rowParticipante = array.getJSONObject(i);
System.out.println(i);
ContentValues nuevoRegistro = new ContentValues();
nuevoRegistro.put("hash", rowParticipante.getString("hash"));
nuevoRegistro.put("codigo_evento", rowParticipante.getString("codigo_evento"));
nuevoRegistro.put("ticket",rowParticipante.getString("ticket"));
nuevoRegistro.put("nombre",rowParticipante.getString("nombre"));
nuevoRegistro.put("inscripcion_id",rowParticipante.getString("inscripcion_id"));
nuevoRegistro.put("validado", rowParticipante.getInt("validado"));
nuevoRegistro.put("sincronizado", 0);
nuevoRegistro.put("numero", rowParticipante.getString("numero"));
nuevoRegistro.put("categoria", rowParticipante.getString("categoria"));
nuevoRegistro.put("codigo_usuario", codigoUser);
nuevoRegistro.put("rut", rowParticipante.getString("rut_clean"));
nuevoRegistro.put("talla", rowParticipante.getString("talla"));
System.out.println("Guardado con exito");
db.insert("Inscripcion", null, nuevoRegistro);
}
if(recorrido>0){
start = start + cantidad;
} else {
continuar = false;
}
}while(continuar == true);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
这种方法让我举例说,没有'车辙'栏。另一种方法中的奇怪之处在于我以同样的方式占据了另一张桌子,没有错。
public void guardarEventos(Context context){
ConnectionInternet cn = new ConnectionInternet();
if(cn.isNetworkAvailable(context)){
SQLiteDatabase dbd = TicketsBaseDatos.getInstance(context).getWritableDatabase();
dbd.execSQL("DELETE FROM Evento");
SessionManager manager = new SessionManager();
nombreCliente = manager.getValue(context,"nombreCliente");
nombreUser = manager.getValue(context, "nombreUser");
hashUser = manager.getValue(context, "hashUsuario");
codigoUser = manager.getValue(context,"codigoUser");
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(Config.URL_BASE+nombreCliente+"/"+Config.URL_DESCARGA_EVENTOS+nombreUser+"/"+hashUser);
try {
JSONArray array = json.getJSONArray("Eventos");
System.out.println("Total eventos : "+array.length());
for (int i = 0; i < array.length(); i++) {
JSONObject rowParticipante = array.getJSONObject(i);
PruebaBD bdTickets = new PruebaBD(context, "Eventrid", null, 1);
SQLiteDatabase db = bdTickets.getWritableDatabase();
ContentValues nuevoRegistro = new ContentValues();
nuevoRegistro.put("codigo_evento", rowParticipante.getString("codigo_evento"));
nuevoRegistro.put("nombre", rowParticipante.getString("glosa"));
nuevoRegistro.put("codigo_usuario",codigoUser);
nuevoRegistro.put("folio",rowParticipante.getString("folio"));
nuevoRegistro.put("nombre_cliente",nombreCliente);
System.out.println("Guardado con exito");
db.insert("Evento", null, nuevoRegistro);
db.close();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
错误SQL:
04-02 03:24:53.538: E/SQLiteLog(32674): (1) table Inscripcion has no column named rut
04-02 03:24:53.538: E/SQLiteDatabase(32674): Error inserting nombre=Felipe Andres categoria=V 40-44 ticket=60KM codigo_evento=SI-CRSCT hash=288D5EF2BD554F700A904D9F codigo_usuario=SI-1 validado=0 rut=12520130K talla= sincronizado=0 inscripcion_id=49188 numero=null
04-02 03:24:53.538: E/SQLiteDatabase(32674): android.database.sqlite.SQLiteException: table Inscripcion has no column named rut (code 1): , while compiling: INSERT INTO Inscripcion(nombre,categoria,ticket,codigo_evento,hash,codigo_usuario,validado,rut,talla,sincronizado,inscripcion_id,numero) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)