Autore Topic: Errore inserimento in Database  (Letto 298 volte)

Offline lolla

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Errore inserimento in Database
« il: 10 Febbraio 2012, 13:03:59 CET »
0
Salve, è da un pò che seguo il forum.
Ho guardato gli altri post con lo stesso errore e non ho trovato soluzioni.

Questo è come chiamo il metodo da Estrazione: a è un arraylist che contiene i dati presi da un xml su internet(ho verificato che li prenda), c è di tipo context

Codice (Java): [Seleziona]
                DatiTabella dt =new DatiTabella(c);
                        dt.open();
                long hafunzionato = dt.nuMetodo(a);
                        dt.close();

questa è la classe che gestisce i dati:

Codice (Java): [Seleziona]
public class DatiTabella {
        public static final String kid = "_id";
        public static final String kvia1="via1", kvia2="via2", kvia3="via3", kvia4="via4";
        public static final String kc1="c1", kc2="c2", kc3="c3", kc4="c4";
        public static final String kimg="img";
       
        private static final String DB_NAME="dati";
        private static final String DB_TABLE="tabella";
        private static final int DB_VERSION=1;
        private String dd[] = new String[9];
        //uso questo array per gestire meglio la funzione di inserimento
       
        private DbHelper hp;
        private final Context context;
        private SQLiteDatabase mioDB;

        private static final String queryCreate="CREATE TABLE IF NOT EXISTS "+ DB_TABLE + " ( "
                        + kid +" INTEGER PRIMARY KEY AUTOINCREMENT, "
                        + kvia1 + " TEXT , "
                        + kc1 + " TEXT , "
                        + kvia2 + " TEXT , "
                        + kc2 + " TEXT , "
                        + kvia3 + " TEXT , "
                        + kc3 + " TEXT , "
                        + kvia4 + " TEXT , "
                        + kc4 + " TEXT , "
                        + kimg + " TEXT )";//non mi interessa che siano NOT NULL
       
        public static class DbHelper extends SQLiteOpenHelper{

                public DbHelper(Context co, String name, CursorFactory factory, int version) {
                        super(co, DB_NAME, null, DB_VERSION);
               
                }

                @Override
                public void onCreate(SQLiteDatabase db) {
                        db.execSQL("drop table if exists "+DB_TABLE);
                        //cancello la tabella se esiste già, perchè ne cambio i dati ogni volta in apertura dell'app

                        db.execSQL(queryCreate);
                }
       
                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                       
                }
               
        }
       
        public DatiTabella(Context c){
                context = c;
        }
       
       
        public DatiTabella open() throws SQLException{

                hp = new DbHelper(context, DB_NAME, null, DB_VERSION);
                mioDB = hp.getWritableDatabase();
                return this;
        }


        public DatiTabella openRead() throws SQLException{
                hp = new DbHelper(context, DB_NAME, null, DB_VERSION);
                mioDB = hp.getReadableDatabase();
                return this;
        }
       
        public void close(){
                hp.close();
        }
       
        public long inserisci() {
                ContentValues cv = new ContentValues();

                cv.put(kvia1, dd[0]);
                cv.put(kc1, dd[1]);
       
                cv.put(kvia2, dd[2]);
                cv.put(kc2, dd[3]);

                cv.put(kvia3, dd[4]);
                cv.put(kc3, dd[5]);
       
                cv.put(kvia4, dd[6]);
                cv.put(kc4, dd[7]);
       
                cv.put(kimg, dd[8]);
       
                return mioDB.insert(DB_TABLE, null, cv);
        }
       
        public Cursor getData() {
                String[] colonne = new String []{kid, kvia1,kc1,kvia2,kc2,kvia3,kc3,kvia4,kc4,kimg};
                Cursor c = mioDB.query(DB_TABLE, colonne, null, null, null, null, null);
                return c;
       }

        public long nuMetodo(ArrayList<String> a) {
                int j=0,i=0;
                long hafunzionato=0;

                for(i=0;i<a.size();i++){
                        if (a.get(i)=="record"){
                                if(i!=0){
                                        hafunzionato=inserisci();
                                        j=0;
                                }
                        }else{
                                if(a.get(i+1)=="record"){
                                        dd[8]=a.get(i);
                                        j=0;
                                }else{
                                        dd[j]=a.get(i);
                                        j++;
                                }
                        }
                }
/*
*queste sono if che faccio per via di come è strutturato l'arraylist, perchè per differenziare i record ho messo una parola chiave, *ovvero "record"
*/

               
                return hafunzionato;
        }

e qui il log, ve lo inserisco una volta sola, in realtà mi viene fuori per ogni record che devo inserire nel db

Codice: [Seleziona]
02-10 12:45:58.687: E/Database(373): Error inserting c1=100 c2=175 img=31.JPG via2=nomevia via3=0 c4=null via4=null c3=0 via1=nomevia
02-10 12:45:58.687: E/Database(373): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
02-10 12:45:58.687: E/Database(373):         at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
02-10 12:45:58.687: E/Database(373):         at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
02-10 12:45:58.687: E/Database(373):         at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
02-10 12:45:58.687: E/Database(373):         at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
02-10 12:45:58.687: E/Database(373):         at it.db.DatiTabella.inserisci(DatiTabella.java:102)
02-10 12:45:58.687: E/Database(373):         at it.db.DatiTabella.nuMetodo(DatiTabella.java:132)
02-10 12:45:58.687: E/Database(373):         at it.conn.Estrazione.cerca(Estrazione.java:41)
02-10 12:45:58.687: E/Database(373):         at it.conn.ExxxActivity.onClick(ExxxActivity.java:30)
02-10 12:45:58.687: E/Database(373):         at android.view.View.performClick(View.java:2485)
02-10 12:45:58.687: E/Database(373):         at android.view.View$PerformClick.run(View.java:9080)
02-10 12:45:58.687: E/Database(373):         at android.os.Handler.handleCallback(Handler.java:587)
02-10 12:45:58.687: E/Database(373):         at android.os.Handler.dispatchMessage(Handler.java:92)
02-10 12:45:58.687: E/Database(373):         at android.os.Looper.loop(Looper.java:130)
02-10 12:45:58.687: E/Database(373):         at android.app.ActivityThread.main(ActivityThread.java:3683)
02-10 12:45:58.687: E/Database(373):         at java.lang.reflect.Method.invokeNative(Native Method)
02-10 12:45:58.687: E/Database(373):         at java.lang.reflect.Method.invoke(Method.java:507)
02-10 12:45:58.687: E/Database(373):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-10 12:45:58.687: E/Database(373):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-10 12:45:58.687: E/Database(373):         at dalvik.system.NativeStart.main(Native Method)

Offline lolla

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:Errore inserimento in Database
« Risposta #1 il: 10 Febbraio 2012, 15:15:45 CET »
0
come non detto, ho risolto