Utilizzare un database esistente

di il
2 risposte

Utilizzare un database esistente

Ciao a tutti.
Qualcuno sa dirmi come faccio a creare una connessione con un database SQLite esistente?

Ho un scritto un database con java.
Adesso voglio utilizzarlo su Android.

Sto provando tentando in diversi modi di accedere al database ma non ci riesco.
Il problema e che non riesco neanche a trovare il file usando la classe File.
Voglio dire ho copiato tramite adb shell il file all'interno della carte data/data/packege/databases/
poi sono andato a cercalo con l'oggetto File ma niente non la vede.
Mi sembrava che bastasse usare la sola chiamata al metodo SQlitedatabase.openDatabase(..) per accedere ad un database esistente, ma non ci sono riuscito.
Questo codice l'ho visto in rete e l'ho ricopiato.
L'ho letto e mi sembrato logio poi non so.
Ho notato che si blocca in alcuni punti che indico con il punto esclamativo.

public class DBHelper extends SQLiteOpenHelper {
    private static String DB_NAME = "database.db";
    private static String DB_PATH ="";
    private SQLiteDatabase database;
    private Context context;


    public DBHelper(Context context){
        super(context,DB_NAME,null,1);
        DB_PATH="/data/data/"+context.getPackageName()+"/databases/";
        this.context=context;
        this.createDatabase();
    }

    public void createDatabase(){
        try {
            boolean dbExist = checkDatabase();
            if (dbExist) {
                Log.i("MESSAGGIO","DB ESISTE GIA'");
                // do nothing - database already exist
            }else{
                //By calling this method and empty database will be created into the default system path
                //of your application so we are gonne be able to overwtrite that database with our database.

                Log.i("MESSAGGIO","DB NON ESISTE CHIAMO copyDatabase");
                copyDatabase();
                this.getReadableDatabase();!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            }
        }catch (Exception e){ }
    }

    private boolean checkDatabase(){
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH+DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READONLY);
            Log.i("MESSAGGIO","IL DATABASE ESISTE");
        }catch (SQLiteException e){
            //database doesn't exist yet.
            Log.i("MESSAGGIO","IL DATABASE NON ESISTE");
        }
        if(checkDB != null){
            checkDB.close();
        }

        return checkDB != null?true:false;
    }

    private void copyDatabase(){
        //Log.i("MESSAGGIO","COPIO IL FILE");
        try {
            //Open your local db as the input stream
            InputStream myInput = context.getAssets().open(DB_NAME);

            //Path to the just created empty db
            String outFileName = DB_PATH+DB_NAME;

            //Open the empty db as the output stream
            OutputStream myOutput = new FileOutputStream(outFileName);!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            Log.i("MESSAGGIO","COPIO IL FILE");
            //Transfer bytes from the inputFile to the outputFile
            byte[] buffer = new byte[1024];
            int lenght;
            while((lenght=myInput.read(buffer))>0){
                myOutput.write(buffer,0,lenght);

            }

            //Close the streams
            myOutput.flush();
            myOutput.close();
            myInput.close();
            Log.i("MESSAGGIO","FILE COPIATO");
        }catch (Exception e){ }
    }

    public SQLiteDatabase openDatabase()throws SQLException{
        String myPath = DB_PATH+DB_NAME;
        database = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
        return database;
    }

    @Override
    public synchronized void close(){
        if(database != null){
            database.close();
        }
        super.close();
    }
    @Override
    public void onCreate(SQLiteDatabase db) {

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Non va in crash ma non gira nemmeno resta fermo
Non ho capito se sta copiando il file, ma non mi pare visto che non mi mostra nessun Log successivo a quelle istruzioni

Sapreste dirmi come fare o cosa andare a guadare per utilizzare un database già esistente?
ciao

2 Risposte

  • Re: Utilizzare un database esistente

    Fino a che non trovi il file ".db" non hai molte speranze di far funzionare il tuo codice
  • Re: Utilizzare un database esistente

    E lo so...
    ma non capisco xkè non lo trova perchè esiste il file
    Forse ho fatto n altra volta il passo troppo grande e devo tornare indietro a rivedere il libro, magari salto qualcosa e non lo so
    Il manifest? boh
    Magari devo vedermi i content provider...tutta roba che ho soltato perchè questo libro che ho è confusionario...anche se rileggendo, mi sembra di capirci qualcosa in più rispetto all'inizio...
Devi accedere o registrarti per scrivere nel forum
2 risposte