Autore Topic: apertura e manipolazione db esistente  (Letto 402 volte)

Offline jonny185

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
apertura e manipolazione db esistente
« il: 03 Aprile 2013, 13:19:50 CEST »
0
Ciao ragazzi, stavo facendo un' applicazione che banalmente mi aprisse un db che già possedevo.
il db l'ho copiato nella cartella assets manualmente, ma leggendo delle guide, questo deve essere copiato in databases.
ho utilizzato delle funzioni per copiare il database da assets a databases, poi dalla attività principale ho istanziato il mio helper di modo che creasse il database,ovvero ne facesse la copia e non mi appaiono errori, anche se non riesco a trovare la cartella(non so dove cercarla). poi ho provato a scriverci dentro , inserendo una tabella e non mi fa partire nemmeno l'applicazione.
che posso fare?
questo è il codice:

Codice: [Seleziona]

public class MioDatabaseHelper extends SQLiteOpenHelper{
        private static String DB_PATH = "/data/data/mia_app/databases/";
        private static final String DB_NAME = "miodatabase.db";
        private static final int DB_VERSION = 1;
        private Context context;
        public MioDatabaseHelper(Context context) {
                super(context,DB_NAME, null, DB_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                  try {
                          if (checkDataBase()) {
                         }
                         else
                                {
                                         copyDatabase();
                                }
                          } catch (IOException e) {
                 e.printStackTrace();
                }
               
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
               
        }
        public void copyDatabase() throws IOException {
            InputStream assetsDB = context.getAssets().open("miodatabase.db");
            OutputStream dbOut = new FileOutputStream("/data/data/mia_app/databases/miodatabase.db");
         
            byte[] buffer = new byte[1024];
            int length;
            while ((length = assetsDB.read(buffer))>0){
              dbOut.write(buffer, 0, length);
            }
         
            dbOut.flush();
            dbOut.close();
            assetsDB.close();
        }
 
  public boolean checkDataBase(){
          SQLiteDatabase checkDB = null;
          try{
                  String myPath = DB_PATH + DB_NAME;
                  checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
          }catch(SQLiteException e){
                  //database does't exist yet.
          }
          if(checkDB != null){
                  checkDB.close();
          }
          return checkDB != null ? true : false;
  }
 
}

[\CODE]

e questi sono i comandi che scrivo nell'attività principale per richiamare la creazione e apertura del database(istanzio l'helper)
[CODE]
private MioDatabaseHelper miohelper;
miohelper = new MioDatabaseHelper(this);
SQLiteDatabase db = miohelper.getWritableDatabase();
db.execSQL("CREATE TABLE nuova_tabella(_id INTEGER PRIMARY KEY , nome TEXT NOT NULL)");
[\CODE]
« Ultima modifica: 03 Aprile 2013, 13:23:36 CEST da jonny185 »