Autore Topic: Problema aprire e chiudere database sqlite  (Letto 652 volte)

Offline Giovy94

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy player YP G50, Galaxy GT-i9305
  • Sistema operativo:
    Windows 7
Problema aprire e chiudere database sqlite
« il: 23 Settembre 2013, 01:59:11 CEST »
0
Salve a tutti vi pongo il mio problema.
ho creato un database per salvare dei dati di un'applicazione che sto sviluppando.
il problema si trova quando cerco di aprire il database dal main, l'applicazione vai in Exception e mostra il toast NotOpen.
provo a postarvi il codice cosi magari riuscite a trovare l'errore anche se AndroidStudio non ne da.

questo è il database:
Codice (Java): [Seleziona]
package com.example.game15;

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


public class Database {

    SQLiteDatabase mDb;
    DbHelper mDbHelper;
    Context mContext;
    private static final String DB_NAME="Score";//nome del db
    private static final int DB_VERSION=1;

    public Database(Context ctx){
        mContext=ctx;
        mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)
    }

    public void open(){  //il database su cui agiamo  leggibile/scrivibile
        mDb=mDbHelper.getWritableDatabase();
    }
    public void close(){ //chiudiamo il database su cui agiamo
        mDb.close();
    }
    public void deleteDB(){
        mDb.delete(ScoresMetaData. SCORE_TABLE, null, null);
    }

    public void insertScore(String name,int step, int time,int type){ //metodo per inserire i dati
        ContentValues cv=new ContentValues();
        cv.put(ScoresMetaData.PLAYER_NAME_KEY, name);
        cv.put(ScoresMetaData.STEP_KEY, step);
        cv.put(ScoresMetaData.TIME_KEY, time);
        cv.put(ScoresMetaData.TYPE_KEY, type);
        mDb.insert(ScoresMetaData. SCORE_TABLE, null, cv);
    }

    public Cursor fetchScores(){ //metodo per fare la query di tutti i dati
        return mDb.query(ScoresMetaData.SCORE_TABLE, null,null,null,null,null,null);
    }

    static class ScoresMetaData {  // i metadati della tabella, accessibili ovunque
        static final String SCORE_TABLE = "MainActivity";
        static final String ID = "_id";
        static final String PLAYER_NAME_KEY = "name";
        static final String STEP_KEY = "step";
        static final String TIME_KEY = "time";
        static final String TYPE_KEY = "type";
    }

    private static final String SCORE_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
            + ScoresMetaData.SCORE_TABLE + " ("
            + ScoresMetaData.ID+ " integer primary key autoincrement, "
            + ScoresMetaData.PLAYER_NAME_KEY + " text not null, "
            + ScoresMetaData.STEP_KEY + " int not null, "
            + ScoresMetaData.TIME_KEY + " long not null, "
            + ScoresMetaData.TYPE_KEY + " int not null, ";




//____________________________________________________________________________________________________________________________________________________________________________
    private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

        public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version) {
            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
            _db.execSQL(SCORE_TABLE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
            //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione

        }

    }
}

e questo è il main:

Codice (Java): [Seleziona]
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        db=new Database(getApplicationContext());
   
        try{
            db.open();
            Toast.makeText(MainActivity.this, "Open",Toast.LENGTH_SHORT).show();
            db.close();
        }
        catch(Exception e){
            Toast.makeText(MainActivity.this, "NotOpen",Toast.LENGTH_SHORT).show();
        }
    }
    Database db;
}


come vedete il codice è semplicissimo e il problema a parer mio è ristretto a quel db.open(); però non riesco a capire perchè mostra il toast NotOpen nel momento in cui la faccio partire.
ho fatto la stessa cosa su un altro progetto con un database simile e funziona, è solo questo che non va.

grazie a tutti del vostro tempo, Buona Giornata.
« Ultima modifica: 23 Settembre 2013, 02:04:45 CEST da Giovy94 »

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:Problema aprire e chiudere database sqlite
« Risposta #1 il: 23 Settembre 2013, 08:06:47 CEST »
0
Puoi postare la porzione di LogCat con gli errori?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Problema aprire e chiudere database sqlite
« Risposta #2 il: 23 Settembre 2013, 08:40:58 CEST »
0
E' sbagliato il SCORE_TABLE_CREATE, presumo che la query corretta sia:
Codice (Java): [Seleziona]
 private static final String SCORE_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
            + ScoresMetaData.SCORE_TABLE + " ("
            + ScoresMetaData.ID+ " integer primary key autoincrement, "
            + ScoresMetaData.PLAYER_NAME_KEY + " text not null, "
            + ScoresMetaData.STEP_KEY + " int not null, "
            + ScoresMetaData.TIME_KEY + " long not null, "
            + ScoresMetaData.TYPE_KEY + " int not null) ";


Offline Giovy94

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy player YP G50, Galaxy GT-i9305
  • Sistema operativo:
    Windows 7
Re:Problema aprire e chiudere database sqlite
« Risposta #3 il: 23 Settembre 2013, 19:34:09 CEST »
0
sisi era quella parentesi grazie mille :)