Autore Topic: Creazione Database mediante copia  (Letto 893 volte)

Offline k3v1n

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S3
Creazione Database mediante copia
« il: 22 Febbraio 2013, 21:13:20 CET »
0
Salve a tutti,
poichè il db dell'app è abbastanza grande, ho pensato di copiarlo e non crearlo mediante esecuzione di uno script sql.

Il database viene correttamente creato, la dimensione sembra essere corretta, ma se provo ad aprirlo non ci sono tabelle. Credo sia corrotto.

Ecco la mia classe helper. Potreste dirmi qual'è l'errore?

Codice (Java): [Seleziona]
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {

        private static final String DATABASE_NAME = "MyDB.sqlite";
        private static final int DATABASE_VERSION = 1;

        private static final String TAG = DatabaseHelper.class.getName();

        private Context context;
        public DatabaseHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
                this.context = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                Log.d(TAG, "db onCreate");
                copyDatabase();
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                Log.d(TAG, "db onUpgrade");
        }

        public void copyDatabase() {
                Log.d(TAG, "db copy start");
                InputStream myInput = null;
                OutputStream myOutput = null;
                try {
                        myInput = context.getAssets().open(DATABASE_NAME);
                        myOutput = new FileOutputStream(context.getDatabasePath(DATABASE_NAME));
                        byte[] buffer = new byte[1024];
                        int length;
                        while ((length = myInput.read(buffer)) > 0) {
                                myOutput.write(buffer, 0, length);
                        }
                        myOutput.flush();
                        myInput.close();
                        myOutput.close();
                } catch (IOException e) {
                        Log.d(TAG, "db copy error: " + e.getMessage());
                        e.printStackTrace();
                }
                Log.d(TAG, "db copy end");
        }

}

Consigli?

Grazie in anticipo a tutti

Luca

Offline Angelus84

  • Utente junior
  • **
  • Post: 59
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Next
  • Play Store ID:
    Angelus
  • Sistema operativo:
    Windows 7
Re:Creazione Database mediante copia
« Risposta #1 il: 23 Febbraio 2013, 12:36:18 CET »
0
Ciao,
ti da qualche errore nel logcat?

Offline k3v1n

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S3
Re:Creazione Database mediante copia
« Risposta #2 il: 23 Febbraio 2013, 12:39:17 CET »
0
Nessun errore... per risolvere il problema ho fatto così... ma la soluzione non mi convince

nel metodo onCreate non richiamo il copyDatabase...
lo chiamo dall'esterno dopo aver instanziato la classe DatabaseHelper.

Codice: [Seleziona]
DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
dbHelper.copyDatabase();

se avete qualche consiglio...