Autore Topic: Problema Colonne SQLite  (Letto 935 volte)

Offline UchihaDD

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows
Problema Colonne SQLite
« il: 10 Marzo 2011, 23:57:19 CET »
0
Salve a tutti ho un problema semplice ma non riesco a capire il motivo, sono un novizio....

Il mio problema è sull'utilizzo di database SQLite e in particolare quando voglio effettuare la select anche del campo STATUS:

Vi posto il mio codice:

Codice (Java): [Seleziona]
public class Database {
        Db data;
        SQLiteDatabase dbsq;
        Context contesto;
         static final String DATABASE_NAME = "tutorialdb";
         static final String TABLE_NAME = "attuatori";
         static final int DATABASE_VERSION = 1;
         static final String PIN = "PIN";
         static final String TYPE = "TYPE";
         static final String STATUS = "STATUS";
           
       
        Database (Context context){
                data = new Db(context,DATABASE_NAME,null,DATABASE_VERSION);
                contesto = context;
        }
        public void open(){  
        dbsq = data.getWritableDatabase();
       
        }

        public void close(){
        dbsq.close();
        }
       
        public long inserisci(String id, String tipo, String valore){
                ContentValues contenitore = new ContentValues();
                contenitore.put(PIN,id);
                contenitore.put(TYPE,tipo);
                contenitore.put(STATUS,valore);
                return dbsq.insert(TABLE_NAME,null,contenitore);
        }
        /** ritorna il numero di righe create */
        public int cancella(String id){
                return dbsq.delete(TABLE_NAME,"WHERE ID = "+id,null);
        }
        /** metodo per aggiornare un certo elemento */
        public int aggiorna(String id, String tipo, String valore){
                ContentValues contenitore = new ContentValues();
                contenitore.put(PIN, id);
                contenitore.put(TYPE, tipo);
                contenitore.put(STATUS, valore);
                return dbsq.update(TABLE_NAME,contenitore,"WHERE PIN="+id,null);
        }
        /** metodo per fare il fetch delle righe */
        public Cursor elenco(){ //metodo per fare la query di tutti i dati
        return dbsq.query(TABLE_NAME, null,null,null,null,null,null);              
        }
       
         private class Db extends SQLiteOpenHelper{
            private static final String SQL_TABLE_CREATE =
                             "CREATE TABLE IF NOT EXISTS "+ TABLE_NAME + "(" +
                             PIN + "text primary key, " +
                             TYPE + " text not null, " +
                             STATUS + " text not null);";

            Db(Context context, String name, CursorFactory factory,int version) {
                super(context, name, factory, version);
             }

             /** */
             public void onCreate(SQLiteDatabase db) {
                db.execSQL(SQL_TABLE_CREATE);
             }

            /** */
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // TODO Auto-generated method stub
                 //db.execSQL("DROP TABLE IF EXISTS attuatori");
                 //onCreate(db);
                }
            /** metodo che ritorna -1 se è andato male altrimenti inserisce una riga*/
       
        }
       
}

E questo è dove chiamo la classe:
Codice (Java): [Seleziona]
        Cursor cur;
        Database d = new Database(this);
        int indiceColonne, indiceColonne2, indiceColonne3;

d.open();
                d.inserisci("1", "a", "0");
                d.inserisci("2", "aiuto", "0");
                d.inserisci("3", "aiuto", "1");
                d.inserisci("4", "v", "0");
                d.inserisci("5", "h", "1");
                cur = d.elenco();
                startManagingCursor(cur);
                indiceColonne=cur.getColumnIndex(Database.PIN);  
                indiceColonne2=cur.getColumnIndex(Database.TYPE);
            indiceColonne3=cur.getColumnIndex(Database.STATUS);
            if(cur.moveToFirst()){  
                do {
                        t2.append("PIN:"+cur.getString(indiceColonne)+", Tipo:"+cur.getString(indiceColonne2));
                        t2.append(", Stato:"+cur.getString(indiceColonne3)+"\n");         //problema
                        } while (cur.moveToNext());
                }
            d.close();

Non so come si posta il LOGCAT del file ma vi scrivo l'errore che mi segnala:

E/Database (  704) "Error inserting STATUS=0 TYPE=h PIN=4 android.database.SQLite.SQLiteException: table attuatori has no column named STATUS: while compiling INSERT INTO attuatori (STATUS,TYPE,PIN) values ( ?, ?, ?) "

A me sembra che il campo STATUS ci sia a tutti gli effetti, non riesco a capire perchè non me lo segnala....

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Problema Colonne SQLite
« Risposta #1 il: 11 Marzo 2011, 08:49:48 CET »
+1

PIN + "text primary key, "
metti lo spazio prima di text

Offline UchihaDD

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:Problema Colonne SQLite
« Risposta #2 il: 11 Marzo 2011, 09:07:54 CET »
0
Grandioso... ho fatto la modifica, rimosso il database attraverso adb shell e ora funziona... stupendo!!!!

Offline UchihaDD

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:Problema Colonne SQLite
« Risposta #3 il: 11 Marzo 2011, 13:43:59 CET »
0
In internet non riesco a trovare nulla di specifico ed affidabile allo stesso tempo,

     public Cursor elencoTipi(){
      String query = "select count(*) from "+TABLE_NAME+" GROUP BY "+TYPE;
      return dbsq.rawQuery(query,new String[] {TYPE});
   }

con questa query vorrei cercare di ottenere due colonne, la colonna TYPE e il numero associato ad ogni gruppo... per caso conoscete un buon tutorial che spiega anche questa parte?

Offline UchihaDD

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows
Re:Problema Colonne SQLite
« Risposta #4 il: 11 Marzo 2011, 22:39:12 CET »
0
Ho risolto inserendo questa stringa come query:
Codice (Java): [Seleziona]
(int) DatabaseUtils.longForQuery(d.dbsq,"SELECT COUNT(PIN) FROM attuatori  WHERE TYPE = 'tipo'",null);
solo che non è un problema ma devo scriverla tante volte quanti sono i tipi presenti nel database