Autore Topic: DatabaseHandler, metodo 'delete' non funziona per singola riga  (Letto 388 volte)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
DatabaseHandler, metodo 'delete' non funziona per singola riga
« il: 14 Maggio 2013, 09:31:32 CEST »
0
Hi there.
Ho creato un piccolo database interno per l'app che sto costruendo, in cui gestisco un carrello della spesa, stile e-commerce.
Il metodo per aggiungere una nuova riga funziona, come quello per eliminarle tutte.
Quello per eliminarne una singola invece no.
Vi posto il codice:
Classe in cui creo l'oggetto
Codice (Java): [Seleziona]
public class Carrello {
       
        String id_user;
        String id_prodotto;
        String quantita;
        String costo;
        String nome_prodotto;
       
        public Carrello(){}
       
        public Carrello(String id_user,String id_prodotto,String quantita,String costo,String nome_prodotto){
                this.id_user = id_user;
                this.id_prodotto = id_prodotto;
                this.quantita = quantita;
                this.costo = costo;
                this.nome_prodotto = nome_prodotto;
        }
        //getters
        public String getIDuser(){
                return this.id_user;
        }
       
        public String getIDprodotto(){
                return this.id_prodotto;
        }
       
        public String getNomeProdotto(){
                return this.nome_prodotto;
        }
       
        public String getQuantita(){
                return this.quantita;
        }
       
        public String getCosto(){
                return this.costo;
        }

        //setters
        public void setIDuser(String id_user){
                this.id_user = id_user;
        }
       
        public void setIDprodotto(String id_prodotto){
                this.id_prodotto = id_prodotto;
        }
       
        public void setQuantita(String quantita){
                this.quantita = quantita;
        }
       
        public void setNomeProdotto(String nome_prodotto){
                this.nome_prodotto = nome_prodotto;
        }
       
        public void setCosto(String costo){
                this.costo = costo;
        }
}

Classe per la gestione del DB:
Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseCarrello extends SQLiteOpenHelper{
       
        private static final int DATABASE_VERSION = 1;
        private static final String DATABASE_NAME = "biosfera_carrello";
        private static final String TABLE_SESSION = "sessione";
        private static final String KEY_ID = "id";
    private static final String KEY_ID_PROD = "id_prodotto";
    private static final String KEY_ID_USER = "id_user";
    private static final String KEY_NOME_PROD = "nome_prodotto";
    private static final String KEY_COSTO = "costo";
    private static final String KEY_QUANTITA = "quantita";
   
    public DatabaseCarrello(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
   
    private static final String DATABASE_CREATE = "create table "
                      + TABLE_SESSION + "(" +
                      KEY_ID_PROD
                      + " text not null, "+
                      KEY_ID_USER
                      +" text not null, "+
                      KEY_NOME_PROD
                      +" text not null, "+
                      KEY_COSTO
                      +" text not null, "+
                      KEY_QUANTITA
                      +" text not null "+
                      " );";
   
    @Override
        public void onCreate(SQLiteDatabase db) {
               
        db.execSQL(DATABASE_CREATE);
               
        }
   
    @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                db.execSQL("DROP TABLE IF EXISTS " + TABLE_SESSION);
                onCreate(db);
               
        }
   
    public Carrello getCarrello(int id){
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(TABLE_SESSION,new String[] { KEY_ID_PROD, KEY_ID_USER,KEY_NOME_PROD,KEY_COSTO,KEY_QUANTITA }, KEY_ID + "=?",new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
                cursor.moveToFirst();
         Carrello carrello = new Carrello(cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5));
         return carrello;
    }
   
    public int updateQuantita(Carrello stato) {
                SQLiteDatabase db = this.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(KEY_QUANTITA, stato.getQuantita());
            return db.update(TABLE_SESSION, values, KEY_ID_PROD + " = ?",
                    new String[] { String.valueOf(stato.getIDprodotto()) });
               
        }
    public void addProdotto(Carrello prodotto){
                SQLiteDatabase db = this.getWritableDatabase();
               
            ContentValues values = new ContentValues();
            values.put(KEY_ID_PROD, prodotto.getIDprodotto());
            values.put(KEY_ID_USER, prodotto.getIDuser());
            values.put(KEY_NOME_PROD, prodotto.getNomeProdotto());
            values.put(KEY_QUANTITA, prodotto.getQuantita());
            values.put(KEY_COSTO, prodotto.getCosto());
            db.insert(TABLE_SESSION, null, values);
            db.close();
        }
   
    public List<Carrello> getAllCarrello(){
                List<Carrello> carrello = new ArrayList<Carrello>();
        String selectQuery = "SELECT  * FROM " + TABLE_SESSION;
 
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()){
                do{
                        Carrello contact = new Carrello();
                        contact.setIDuser(cursor.getString(1));
                        contact.setIDprodotto(cursor.getString(2));
                        contact.setQuantita(cursor.getString(3));
                        contact.setCosto(cursor.getString(4));
                        contact.setNomeProdotto(cursor.getString(5));
                carrello.add(contact);
                }while (cursor.moveToNext());
        }
        return carrello;
        }
   
    public void deleteAllCarrello(){
                SQLiteDatabase db = this.getWritableDatabase();
                db.delete(TABLE_SESSION, null, null);
                db.close();
               
        }
   
    public void deleteProdottoCarrello(Carrello carrello) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_SESSION, KEY_ID_PROD + " = ?",
                new String[] {carrello.getIDprodotto() });
        db.close();
    }
   
   
}

Ora, quando voglio eliminare una singola riga, procedo così:
Codice (Java): [Seleziona]
db.deleteProdottoCarrello(new Carrello(id_prodotto,null,null,null,null));ma non funziona ... il logCat non mi è d'aiuto, non vi viene stampato nulla.
Qualcuno può darmi una mano? :-P
Grazie!
True perfection has to be imperfect

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:DatabaseHandler, metodo 'delete' non funziona per singola riga
« Risposta #1 il: 14 Maggio 2013, 09:42:09 CEST »
0
Perchè passare tutto un Carrello? Passa solo id_prodotto.

E poi non mi sembra bellissimo getWritableDatabase ripetuto ogni volta, puoi farlo una tantum alla creazione dell'helper.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:DatabaseHandler, metodo 'delete' non funziona per singola riga
« Risposta #2 il: 14 Maggio 2013, 09:56:11 CEST »
0
Perchè passare tutto un Carrello? Passa solo id_prodotto.

E poi non mi sembra bellissimo getWritableDatabase ripetuto ogni volta, puoi farlo una tantum alla creazione dell'helper.

Intendi una cosa di questo tipo?
Codice (Java): [Seleziona]
public void deleteRow(String[] s) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_SESSION, KEY_ID_PROD + " = ?", s);
        db.close();
    }

per poi passarlo così?
Codice (Java): [Seleziona]
db.deleteRow(new String[] {id_prodotto});
« Ultima modifica: 14 Maggio 2013, 10:08:14 CEST da MikeKeepsOnShine »
True perfection has to be imperfect