CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: carotix con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 26 Thanks ricevuti nell'ultimo mese

Pagina 2 di 3 primaprima 123 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 11 a 20 su 21
Discussione:

Android e database SQLite

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #11
    Baby Droid


    Registrato dal
    Apr 2011
    Messaggi
    12

    Ringraziamenti
    3
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da Audrey Visualizza il messaggio
    Ragazzi sono nuova sia del forum che della programmazione android..ho fatto un pò di pratica attraverso forum come questo e il manuale di Carli..solo che si danno troppe cose per scontato che io non so .

    Ho da creare un progetto universitario sulla gestione dei POI di un gps. Ho bisogno di un db per la gestione dei POI che andrò a richiamare una volta implementate le mappe. Il mio problema è: per creare un db in locale da ciò che ho letto è meglio crearlo direttamente in eclipse e non importarlo, giusto? Ora il punto è che non riesco a capire di quante classi ho bisogno..io avevo pensato:
    una classe db per la gestione del database (select/insert)
    una classe myPOI che rappresenta il POI (con tutte le sue proprietà) da passare alla classe db.
    e poi? la classe per la creazione del database è "in più" (è un activity?), giusto? quindi in totale per questa parte avrei bisogno della creazione di tre classi?

    sono domande banali, lo so, ma io sto impazzendo e non sono ferratissima quindi scusatemi in anticipo
    Io ho tutti e 2 i manuali di carli ... sono una C*******A bestiale! cercati android programming di puntoinformatico è gratis e la parte sui data base la spiega bene!
    le classi per i database prima di fare e dire controlla quelle di Android, ci sono già.
    Credo però ci siano problemi con le foreign key sqlite ma se ti serve per uno scopo usa e getta e non per la distribuzione funzioneranno bene!

  2.  
  3. #12
    Baby Droid


    Registrato dal
    Feb 2011
    Località
    Milano
    Messaggi
    33

    Ringraziamenti
    2
    Ringraziato 1 volta in 1 Post
    Predefinito

    Quote Originariamente inviato da Audrey Visualizza il messaggio
    Ora il punto è che non riesco a capire di quante classi ho bisogno..io avevo pensato:
    una classe db per la gestione del database (select/insert)
    una classe myPOI che rappresenta il POI (con tutte le sue proprietà) da passare alla classe db.
    e poi? la classe per la creazione del database è "in più" (è un activity?), giusto? quindi in totale per questa parte avrei bisogno della creazione di tre classi?

    sono domande banali, lo so, ma io sto impazzendo e non sono ferratissima quindi scusatemi in anticipo
    ti serve una classe per il db utilizzando l'helper con dentro:
    - la creazione del db
    - la creazione delle tabelle
    - la creazione degli insert , update, delete, drop (il truncate table non esiste)
    - una select generica o se vuoi personalizzate da usare come medoti nell'app

    un'altra per i POI e una per il core dell'app

  4. #13
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    22

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Salve a tutti, dato che si parla proprio dei database voglio chiedervi un cortese aiuto.

    Ho creato un database creando una classe GestoreDb che all'interno ha un'altra classe DbHelper che estende SQLiteOpenHelper.

     
    1
    2
    public class GestoreDbTesi {
    3
        
    4
          private static final String TAG = GestoreDbTesi.class.getSimpleName();
    5
    6
          public static final String C_ID = BaseColumns._ID; // Special for id
    7
          public static final String COLONNA_NUMEROTESI = "NUMERO_TESI";        
    8
          public static final String COLONNA_RELATORE = "RELATORE";     
    9
          public static final String COLONNA_TESISTA = "TESISTA";       
    10
          public static final String COLONNA_TITOLOTESI = "TITOLO_TESI";
    11
          public static final String COLONNA_DATALAUREA = "DATA_LAUREA";
    12
          public static final String COLONNA_DATASEMINARIO = "DATA_SEMINARIO";
    13
          
    14
        
    15
          //contatore id persone
    16
          private static int idcounter = 0;
    17
          
    18
          Context context;
    19
          DbHelper dbHelper;
    20
          
    21
          public GestoreDbTesi(Context context){
    22
              this.context=context;
    23
              dbHelper = new DbHelper();
    24
          }
    25
          
    26
          public void close(){
    27
              dbHelper.close();
    28
          }
    29
          
    30
          /**
    31
           * Inserts into database
    32
           * 
    33
           * @param values
    34
           *          Name/value pairs data
    35
           */
    36
          public void insert(Tesi t) {
    37
            idcounter++;
    38
              
    39
            //creo i valori da inserire nel db  
    40
            ContentValues values = new ContentValues();
    41
            values.put(C_ID, idcounter);
    42
            values.put(COLONNA_NUMEROTESI, t.getNumeroTesi());
    43
            values.put(COLONNA_RELATORE, t.getRelatore());
    44
            values.put(COLONNA_TESISTA, t.getTesista());
    45
            values.put(COLONNA_TITOLOTESI, t.getTitoloTesi());
    46
            values.put(COLONNA_DATALAUREA, t.getDataLaurea());
    47
            values.put(COLONNA_DATASEMINARIO, t.getDataSeminario());
    48
              
    49
            // Open Database
    50
            SQLiteDatabase db = dbHelper.getWritableDatabase();
    51
    52
            // Insert into database
    53
            //db.insertWithOnConflict(DbHelper.TABLE, null, values/*,   --->non funziona
    54
            //    SQLiteDatabase.CONFLICT_REPLACE*/);
    55
            Cursor c = getTesiByTesista(t.getTesista());
    56
            if(!c.moveToFirst())                            //non inserisce se esiste
    57
                db.insert(DbHelper.TABLE, null, values);
    58
            else db.replace(DbHelper.TABLE, null, values);  //sostituisce se esiste
    59
            
    60
            // Close Database
    61
            db.close();
    62
          
    63
          }
    64
          
    65
          public Cursor getTesiByRelatore(String relatore){
    66
              
    67
              SQLiteDatabase db = dbHelper.getReadableDatabase();
    68
              Cursor c1,c2;
    69
              //Cursor c = db.query(dbHelper.TABLE, null, "COGNOME = "+"'"+nome+"'", null, null, null, "COGNOME DESC");
    70
             // if(c != null){
    71
                  //c = db.query(dbHelper.TABLE, null, "NOME = "+"\'"+nome+"\'", null, null, null, "COGNOME DESC");
    72
              String query = "SELECT * FROM tesi WHERE RELATORE = ? ORDER BY RELATORE ASC";
    73
              String[] selectionArgs = {relatore};
    74
              c1 = db.rawQuery(query, selectionArgs);
    75
             // }
    76
              return c1;
    77
          }
    78
          
    79
          //usato esclusivamente per inserire o meno una tesi nel db
    80
          public Cursor getTesiByTesista(String tesista){
    81
              SQLiteDatabase db = dbHelper.getReadableDatabase();
    82
              Cursor c1;
    83
              String query = "SELECT * FROM tesi WHERE TESISTA = ? ORDER BY RELATORE ASC";
    84
              String[] selectionArgs = {tesista};
    85
              c1 = db.rawQuery(query, selectionArgs);
    86
              return c1;
    87
          }
    88
          
    89
          public Cursor getAll(){
    90
              SQLiteDatabase db = dbHelper.getReadableDatabase();
    91
              Cursor c = db.query(dbHelper.TABLE, null, null, null, null, null, "RELATORE");
    92
              return c;
    93
          }
    94
          
    95
          /**
    96
           * Deletes ALL the data
    97
           */
    98
          public void delete() {
    99
            // Open Database
    100
            SQLiteDatabase db = dbHelper.getWritableDatabase();
    101
    102
            // Delete the data
    103
            db.delete(DbHelper.TABLE, null, null);
    104
    105
            // Close Database
    106
            db.close();
    107
          
    108
          }
    109
          
    110
          /*
    111
          public Cursor query() {
    112
                // Open Database
    113
                SQLiteDatabase db = dbHelper.getReadableDatabase();
    114
    115
                return db.query(DbHelper.TABLE, null, null, null, null, null, C_CREATED_AT
    116
                    + " DESC");
    117
              }
    118
              */
    119
          
    120
        private class DbHelper extends SQLiteOpenHelper{
    121
            
    122
            public static final String DB_NAME = "tesideis.db";
    123
            public static final int DB_VERSION = 1;
    124
            public static final String TABLE = "tesi";
    125
    126
            public DbHelper() {
    127
                super(context, DB_NAME, null, DB_VERSION);
    128
            }
    129
    130
            @Override
    131
            public void onCreate(SQLiteDatabase db) {
    132
                
    133
                  String sql = String.format(
    134
                          "create table %s (%s int primary key, %s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT",
    135
                          TABLE, C_ID, COLONNA_NUMEROTESI, COLONNA_RELATORE, COLONNA_TESISTA, COLONNA_TITOLOTESI, COLONNA_DATALAUREA, COLONNA_DATASEMINARIO);
    136
                      // sql = context.getString(R.string.sql);
    137
    138
                      Log.d(TAG, "onCreate sql: " + sql);
    139
    140
                      db.execSQL(sql);
    141
                
    142
            }
    143
    144
            @Override
    145
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    146
                  // Typically you do ALTER TABLE... here
    147
                  db.execSQL("drop table if exists " + TABLE);
    148
                  Log.d(TAG, "onUpdate dropped table " + TABLE);
    149
                  this.onCreate(db);
    150
            }
    151
            
    152
        }
    153


    il problema è il seguente... quando da un'altra classe faccio una query usando la classe GestoreDb mi ritorna una eccezione: SQLiteException: cant't upgrade read-only database from version 0 to 1

    8
     
    1
    2
        dbTesi = new GestoreDbTesi(getApplicationContext());
    3
                    
    4
                    //verifico se il db risulta vuoto o meno
    5
                    Cursor c = dbTesi.getAll(); //---> ERRORE SQLITE CANT'T UPGRADE READ-ONLY DATABASE
    6
                    
    7
                    startManagingCursor(c);
    8


    Faccio notare che la stessa cosa l'ho fatto precedentemente in modo uguale in un altro progetto e funziona....

    Chiedo il vostro aiuto e se vi è possibile rispondere in tempi brevi dato che son alle strette con il tempo.

    Ringrazio in anticipo

  5. #14
    Baby Droid


    Registrato dal
    Apr 2011
    Messaggi
    12

    Ringraziamenti
    3
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da mikelmanto Visualizza il messaggio
    Salve a tutti, dato che si parla proprio dei database voglio chiedervi un cortese aiuto.

    Ho creato un database creando una classe GestoreDb che all'interno ha un'altra classe DbHelper che estende SQLiteOpenHelper.

    153
     
    1
    2
    public class GestoreDbTesi {
    3
        
    4
          private static final String TAG = GestoreDbTesi.class.getSimpleName();
    5
    6
          public static final String C_ID = BaseColumns._ID; // Special for id
    7
          public static final String COLONNA_NUMEROTESI = "NUMERO_TESI";        
    8
          public static final String COLONNA_RELATORE = "RELATORE";     
    9
          public static final String COLONNA_TESISTA = "TESISTA";       
    10
          public static final String COLONNA_TITOLOTESI = "TITOLO_TESI";
    11
          public static final String COLONNA_DATALAUREA = "DATA_LAUREA";
    12
          public static final String COLONNA_DATASEMINARIO = "DATA_SEMINARIO";
    13
          
    14
        
    15
          //contatore id persone
    16
          private static int idcounter = 0;
    17
          
    18
          Context context;
    19
          DbHelper dbHelper;
    20
          
    21
          public GestoreDbTesi(Context context){
    22
              this.context=context;
    23
              dbHelper = new DbHelper();
    24
          }
    25
          
    26
          public void close(){
    27
              dbHelper.close();
    28
          }
    29
          
    30
          /**
    31
           * Inserts into database
    32
           * 
    33
           * @param values
    34
           *          Name/value pairs data
    35
           */
    36
          public void insert(Tesi t) {
    37
            idcounter++;
    38
              
    39
            //creo i valori da inserire nel db  
    40
            ContentValues values = new ContentValues();
    41
            values.put(C_ID, idcounter);
    42
            values.put(COLONNA_NUMEROTESI, t.getNumeroTesi());
    43
            values.put(COLONNA_RELATORE, t.getRelatore());
    44
            values.put(COLONNA_TESISTA, t.getTesista());
    45
            values.put(COLONNA_TITOLOTESI, t.getTitoloTesi());
    46
            values.put(COLONNA_DATALAUREA, t.getDataLaurea());
    47
            values.put(COLONNA_DATASEMINARIO, t.getDataSeminario());
    48
              
    49
            // Open Database
    50
            SQLiteDatabase db = dbHelper.getWritableDatabase();
    51
    52
            // Insert into database
    53
            //db.insertWithOnConflict(DbHelper.TABLE, null, values/*,   --->non funziona
    54
            //    SQLiteDatabase.CONFLICT_REPLACE*/);
    55
            Cursor c = getTesiByTesista(t.getTesista());
    56
            if(!c.moveToFirst())                            //non inserisce se esiste
    57
                db.insert(DbHelper.TABLE, null, values);
    58
            else db.replace(DbHelper.TABLE, null, values);  //sostituisce se esiste
    59
            
    60
            // Close Database
    61
            db.close();
    62
          
    63
          }
    64
          
    65
          public Cursor getTesiByRelatore(String relatore){
    66
              
    67
              SQLiteDatabase db = dbHelper.getReadableDatabase();
    68
              Cursor c1,c2;
    69
              //Cursor c = db.query(dbHelper.TABLE, null, "COGNOME = "+"'"+nome+"'", null, null, null, "COGNOME DESC");
    70
             // if(c != null){
    71
                  //c = db.query(dbHelper.TABLE, null, "NOME = "+"\'"+nome+"\'", null, null, null, "COGNOME DESC");
    72
              String query = "SELECT * FROM tesi WHERE RELATORE = ? ORDER BY RELATORE ASC";
    73
              String[] selectionArgs = {relatore};
    74
              c1 = db.rawQuery(query, selectionArgs);
    75
             // }
    76
              return c1;
    77
          }
    78
          
    79
          //usato esclusivamente per inserire o meno una tesi nel db
    80
          public Cursor getTesiByTesista(String tesista){
    81
              SQLiteDatabase db = dbHelper.getReadableDatabase();
    82
              Cursor c1;
    83
              String query = "SELECT * FROM tesi WHERE TESISTA = ? ORDER BY RELATORE ASC";
    84
              String[] selectionArgs = {tesista};
    85
              c1 = db.rawQuery(query, selectionArgs);
    86
              return c1;
    87
          }
    88
          
    89
          public Cursor getAll(){
    90
              SQLiteDatabase db = dbHelper.getReadableDatabase();
    91
              Cursor c = db.query(dbHelper.TABLE, null, null, null, null, null, "RELATORE");
    92
              return c;
    93
          }
    94
          
    95
          /**
    96
           * Deletes ALL the data
    97
           */
    98
          public void delete() {
    99
            // Open Database
    100
            SQLiteDatabase db = dbHelper.getWritableDatabase();
    101
    102
            // Delete the data
    103
            db.delete(DbHelper.TABLE, null, null);
    104
    105
            // Close Database
    106
            db.close();
    107
          
    108
          }
    109
          
    110
          /*
    111
          public Cursor query() {
    112
                // Open Database
    113
                SQLiteDatabase db = dbHelper.getReadableDatabase();
    114
    115
                return db.query(DbHelper.TABLE, null, null, null, null, null, C_CREATED_AT
    116
                    + " DESC");
    117
              }
    118
              */
    119
          
    120
        private class DbHelper extends SQLiteOpenHelper{
    121
            
    122
            public static final String DB_NAME = "tesideis.db";
    123
            public static final int DB_VERSION = 1;
    124
            public static final String TABLE = "tesi";
    125
    126
            public DbHelper() {
    127
                super(context, DB_NAME, null, DB_VERSION);
    128
            }
    129
    130
            @Override
    131
            public void onCreate(SQLiteDatabase db) {
    132
                
    133
                  String sql = String.format(
    134
                          "create table %s (%s int primary key, %s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT",
    135
                          TABLE, C_ID, COLONNA_NUMEROTESI, COLONNA_RELATORE, COLONNA_TESISTA, COLONNA_TITOLOTESI, COLONNA_DATALAUREA, COLONNA_DATASEMINARIO);
    136
                      // sql = context.getString(R.string.sql);
    137
    138
                      Log.d(TAG, "onCreate sql: " + sql);
    139
    140
                      db.execSQL(sql);
    141
                
    142
            }
    143
    144
            @Override
    145
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    146
                  // Typically you do ALTER TABLE... here
    147
                  db.execSQL("drop table if exists " + TABLE);
    148
                  Log.d(TAG, "onUpdate dropped table " + TABLE);
    149
                  this.onCreate(db);
    150
            }
    151
            
    152
        }
    153


    il problema è il seguente... quando da un'altra classe faccio una query usando la classe GestoreDb mi ritorna una eccezione: SQLiteException: cant't upgrade read-only database from version 0 to 1

    8
     
    1
    2
        dbTesi = new GestoreDbTesi(getApplicationContext());
    3
                    
    4
                    //verifico se il db risulta vuoto o meno
    5
                    Cursor c = dbTesi.getAll(); //---> ERRORE SQLITE CANT'T UPGRADE READ-ONLY DATABASE
    6
                    
    7
                    startManagingCursor(c);
    8


    Faccio notare che la stessa cosa l'ho fatto precedentemente in modo uguale in un altro progetto e funziona....

    Chiedo il vostro aiuto e se vi è possibile rispondere in tempi brevi dato che son alle strette con il tempo.

    Ringrazio in anticipo
    auuauhauhahua............. SQLiteDatabase db = dbHelper.getReadableDatabase();

  6. #15
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    22

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da DarkPhoinix Visualizza il messaggio
    auuauhauhahua............. SQLiteDatabase db = dbHelper.getReadableDatabase();
    Scusa ma cosa c'è di strano?

    devi pur aprire il database in lettura.

  7. #16
    Baby Droid


    Registrato dal
    Oct 2011
    Messaggi
    5

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    ciao scuste ma nell'istruzione SQLiteDatabase db = (new OpenHelper(context, "nomedb.db", OpenHelper.DATABASE_VER)).getWritableDatabase(); cosa devo mettere in context?

  8. #17
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    22

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Salve kalacta269,

    Ora è un pò che non tocco più Android ma per quanto ti posso dire io gli devi passare il Context della tua Activity da cui stai operando.

    In ogni caso non sono a conoscenza di come hai implemenato tu le classi che gestiscono il database ma potresti, se vuoi, prendere
    spunto da come l'ho costruito io (vedi il mio post di Giugno).

    Prova in questo modo e magari funziona oppure passa il Context della tua Activity alla chiamata che fai tu..

    Sauti

    mikelmanto

  9. #18
    Baby Droid


    Registrato dal
    Oct 2011
    Messaggi
    5

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Grazie mille infatti seguendo il tuo metodo mi incappo in degli errori e non so come mai non mi crea il database eheheehheh

  10. #19
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    22

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    kalacta269

    non ho detto che risolvi con il mio metodo.... infatti come leggi dai post precedenti avevo un errore che non riuscivo a risolvere
    che ho risolto da solo ma purtroppo non ricordo come l'ho risolto.

    La cosa fondamentale però è che ho suddiviso la crezione della tabella dalla sua gestione. Infatti DbHelper effettua la creazione ed l'ubdate
    del db mentre GestoreDb effettua le varie operazioni (insert, delete....) sul database.
    L'errore che mi dava era per via dell'update in particoare rigaurdante la versione.... se riesco a trovare la soluzione ti faccio sapere.

    Hai provato a passare il Context della tua Activity alla chiamata che fai tu?

  11. #20
    Baby Droid


    Registrato dal
    Oct 2011
    Messaggi
    5

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Si si ho provato come dici tu ma nada eheeheh

Pagina 2 di 3 primaprima 123 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy