Autore Topic: Errore inserimento dati in sqlite  (Letto 631 volte)

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Errore inserimento dati in sqlite
« il: 22 Gennaio 2012, 17:13:44 CET »
0
Ciao ragazzi,
ho un problema con l'inserimento dei dati un db sqlite, spero mi possiate aiutare. Per essere più chiaro vi posto il codice:
- la tabella la creo in questo modo:
Codice (Java): [Seleziona]
static class MarcaComponente {  // i metadati della tabella, accessibili ovunque
                        static final String TABLE_NAME = "marcacomponente";
//                      static final String id = "_id"; //id che identifica il record
                        static final String chiave = "chiave"; //id che identifica il record
                        static final String Id = "Id";
                        static final String CodeBusiness = "CodeBusiness";
                        static final String Name = "Name";
                        static final String Description = "Description";
                        static final String Enabled = "Enabled";
                        static final String Link = "Link";
                        static final String Image = "Image";
                }
         
         private static final String MARCACOMPONENTE_TABLE_CREATE = "create table if not exists "  //codice sql di creazione della tabella
                                + MarcaComponente.TABLE_NAME + " ("
                                + MarcaComponente.chiave + " integer primary key autoincrement, "
                                + MarcaComponente.Id + " integer not null, "
                                + MarcaComponente.CodeBusiness + " text not null, "
                                + MarcaComponente.Name + " text not null, "
                                + MarcaComponente.Description + " text not null, "
                                + MarcaComponente.Enabled + " text not null, "
                                + MarcaComponente.Link + " text not null, "
                                + MarcaComponente.Image + " text not null);";
- per quanto riguarda l'inserimento dei dati, questi li prendo da un web services, creandomi un oggetto soap, nel seguente modo:
Codice (Java): [Seleziona]
private void inserisciMarcaComponente(SQLiteDatabase db, SoapObject soap){
                int num_marcacomponente = soap.getPropertyCount();
                ContentValues values = new ContentValues();
                Log.i("", "num_marcacomponente "+num_marcacomponente);
                //Long id = null;
                try{
                        for(int i=0; i<num_marcacomponente;i++){
//                              PersonMobile pm = new PersonMobile();
                                Log.i("", "sono nel try di inserisciMarcaComponente");
                                Log.i("", "Dim value " +values.size());
                                SoapObject pi = (SoapObject) soap.getProperty(i);
                                values.put("Id", pi.getProperty(0).toString());
                                Log.i("", "L'id è "+pi.getProperty(0).toString());
                                values.put("CodeBusiness", pi.getProperty(1).toString());
                                Log.i("", "Il code  è "+pi.getProperty(1).toString());
                                values.put("Name", pi.getProperty(2).toString());
                                Log.i("", "Name è "+pi.getProperty(2).toString());
                                values.put("Description", pi.getProperty(3).toString());
                                Log.i("", "Desc è "+pi.getProperty(3).toString());
                                values.put("Enabled", pi.getProperty(4).toString());
                                Log.i("", "Enab è "+pi.getProperty(4).toString());
                                values.put("Link", pi.getProperty(5).toString());
                                Log.i("", "Il link è "+pi.getProperty(5).toString());
//                      values.put("Image", pi.getProperty(6).toString());
                                values.put("Image", "manuale");
//                      Log.i("", "Image è "+pi.getProperty(6).toString());
                                Log.i("", "Image è manuale");
                                Log.i("", "Dim value " +values.size());
                                long a = db.insert("marcacomponente", null, values);
                                Log.i("", "inserimento: " +a);
                                Log.i("", "Dim value " +values.size());
                               
//                              id = (Long) pi.getProperty(0);
//                      Log.i("", "id "+id);
                        }
                        }catch (Exception e) {
                                Log.i("", "Errore: "+e.getMessage());
                        }
                        //return id;
l'errore che mi restituisce è il seguente:
 E/Database(336): Error inserting Name=AAA Enabled=true Description=LEADER, PLANNING  Id=1 Link=www.goal.com Image=manuale CodeBusiness=goal
01-22 15:55:04.859: E/Database(336): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

Grazie in anticipo :p

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore inserimento dati in sqlite
« Risposta #1 il: 22 Gennaio 2012, 20:42:44 CET »
0
Hai postato poco codice, solo due righe di LogCat e non è noto cosa contiene il database, ma tirando ad indovinare il problema è che forse il database è ancora quello che ID come chiave primaria e tu stai cercando di inserire elementi con ID uguali.

Dovresti fare un PULL del database dal device, quindi aprirlo con un SQLite browser. E in ogni caso provare sempre le query prima nel SQLite browser.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Errore inserimento dati in sqlite
« Risposta #2 il: 23 Gennaio 2012, 10:06:11 CET »
0
Ciao, ti ringrazio per la risposta, il log completo è il seguente:

01-23 08:52:43.452: E/Database(335): Error inserting Name=AAA Enabled=true Description=LEADER, PLANNING  Id=1 Link=www.goal.com Image=manuale CodeBusiness=goal.
01-23 08:52:43.452: E/Database(335): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
01-23 08:52:43.452: E/Database(335):    at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
01-23 08:52:43.452: E/Database(335):    at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
01-23 08:52:43.452: E/Database(335):    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
01-23 08:52:43.452: E/Database(335):    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
01-23 08:52:43.452: E/Database(335):    at interventi.InterventiActivity.inserisciMarcaComponente(InterventiActivity.java:252)
01-23 08:52:43.452: E/Database(335):    at interventi.InterventiActivity.downloadListaMarche(InterventiActivity.java:299)
01-23 08:52:43.452: E/Database(335):    at interventi.InterventiActivity.onCreate(InterventiActivity.java:65)
01-23 08:52:43.452: E/Database(335):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-23 08:52:43.452: E/Database(335):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-23 08:52:43.452: E/Database(335):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-23 08:52:43.452: E/Database(335):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-23 08:52:43.452: E/Database(335):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-23 08:52:43.452: E/Database(335):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 08:52:43.452: E/Database(335):    at android.os.Looper.loop(Looper.java:123)
01-23 08:52:43.452: E/Database(335):    at android.app.ActivityThread.main(ActivityThread.java:3683)
01-23 08:52:43.452: E/Database(335):    at java.lang.reflect.Method.invokeNative(Native Method)
01-23 08:52:43.452: E/Database(335):    at java.lang.reflect.Method.invoke(Method.java:507)
01-23 08:52:43.452: E/Database(335):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-23 08:52:43.452: E/Database(335):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-23 08:52:43.452: E/Database(335):    at dalvik.system.NativeStart.main(Native Method)


Ho fatto il Pull e come chiave primaria mi da Id (non mi riconosce il campo chiave come primaria)




Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore inserimento dati in sqlite
« Risposta #3 il: 23 Gennaio 2012, 11:18:37 CET »
+1
Ho fatto il Pull e come chiave primaria mi da Id (non mi riconosce il campo chiave come primaria)

Però!! Ci ho indovinato davvero... ho sprecato un jolly che potevo giocarmi al superenalotto.  :'(

A parte gli scherzi, distruggi quel database e ricrealo con la corretta chiave primaria. Oppure creane uno nuovo (nome nuovo) nel modo corretto. Oppure se vuole usare ID in tutti i modi come chiave primaria, cambia tu il codice in modo opportuno.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Errore inserimento dati in sqlite
« Risposta #4 il: 23 Gennaio 2012, 13:49:17 CET »
0
Ti ringrazio per il suggerimento, ho cancellato e ricreato il db settando i campi in modo appropriato, ora funziona tutto in modo corretto. Grazie ancora :p