Autore Topic: Aggiornamento applicazione dal market e gestione DB  (Letto 1378 volte)

Offline strike76

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid
  • Play Store ID:
    Paolo Quattrociocchi
Aggiornamento applicazione dal market e gestione DB
« il: 16 Aprile 2010, 10:12:29 CEST »
0
Ciao ragazzi, eccomi di nuovo !

La mia applicazione utilizza un db per memorizzare dei dati e all'avvvio controlla se esiste il db all'interno del path "data\data\nome_package\databases". Se non esiste lo crea prendendo in input da un file che si trova in ASSETS.
Ho fatto svariati aggiornamenti al db, e ogni volta sul mio acer liquid devo disinstallare l'applicazione e reinstallarla (quindi il db viene di nuovo creato con i nuovi dati).
Che succede nel caso in cui l'applicazione viene aggiornata tramite market ? L'applicazione viene disinstallata (e quindi anche cancellato il db) e reinstallata ? Oppure c'e' un semplice update ?
Inoltre se volessi salvare alcuni dati dal vecchio db (dati aggiornati dall'utente) per poi reimportarli nel nuovo come potrei fare ?

Grazie a tutti !!!!!!

Offline BobArctor

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero, Galaxy S4, GP50
  • Play Store ID:
    Michele Valentini
  • Sistema operativo:
    Windows 8
Re: Aggiornamento applicazione dal market e gestione DB
« Risposta #1 il: 16 Aprile 2010, 11:06:43 CEST »
0
ciao! devi cambiare l'attributo version del database, e a quel punto, se il db installato è in una versione precedente verrà sovrascritto in automatico! ora sono in treno, se non trovi altre info (sulla'esempio del notepad di google stesso c'è mi sembra l'attributo in questione) appena arrivo a casa ti posto dettagli maggiori! ciao e Buon lavoro,
Michele

Sent from my HTC Hero using Tapatalk

Offline strike76

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid
  • Play Store ID:
    Paolo Quattrociocchi
Re:Aggiornamento applicazione dal market e gestione DB
« Risposta #2 il: 16 Aprile 2010, 12:25:29 CEST »
0
Grazie BobArctor, se puoi manda pure le info !  O:-)

Offline BobArctor

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero, Galaxy S4, GP50
  • Play Store ID:
    Michele Valentini
  • Sistema operativo:
    Windows 8
Re:Aggiornamento applicazione dal market e gestione DB
« Risposta #3 il: 16 Aprile 2010, 19:01:13 CEST »
0
ciao!!!
allora:
la classe SQLiteOpenHelper ha come costruttore (Context context, String databaseName, CursorFactory cf, e int Version).
quindi quando tu hai esteso questa classe per creare il tuo helper, il costruttore di questa (che prenderà, per forza di cose, almeno il context attuale) richiamerà con super il costruttore di SQLiteOpenHelper, passando il context appunto, il nome del database, un eventuale CursorFactory (può essere null) e un intero che identifica la versione.
se l'intero passato come parametro è maggiore del numero di versione del db creato precedentemente, questo viene ricreato.

qui il DatabaseHelper di Notepad v3, quello del tutorial di google.
Codice (Java): [Seleziona]
 
/*
 * Copyright (C) 2008 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */


package com.android.demo.notepad3;

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

/**
 * Simple notes database access helper class. Defines the basic CRUD operations
 * for the notepad example, and gives the ability to list all notes as well as
 * retrieve or modify a specific note.
 *
 * This has been improved from the first version of this tutorial through the
 * addition of better error handling and also using returning a Cursor instead
 * of using a collection of inner classes (which is less scalable and not
 * recommended).
 */

public class NotesDbAdapter {

    public static final String KEY_TITLE = "title";
    public static final String KEY_BODY = "body";
    public static final String KEY_ROWID = "_id";

    private static final String TAG = "NotesDbAdapter";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
   
    /**
     * Database creation sql statement
     */

    private static final String DATABASE_CREATE =
            "create table notes (_id integer primary key autoincrement, "
                    + "title text not null, body text not null);";

    private static final String DATABASE_NAME = "data";
    private static final String DATABASE_TABLE = "notes";
    private static final int DATABASE_VERSION = 2;

    private final Context mCtx;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS notes");
            onCreate(db);
        }
    }

    /**
     * Constructor - takes the context to allow the database to be
     * opened/created
     *
     * @param ctx the Context within which to work
     */

    public NotesDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }

    /**
     * Open the notes database. If it cannot be opened, try to create a new
     * instance of the database. If it cannot be created, throw an exception to
     * signal the failure
     *
     * @return this (self reference, allowing this to be chained in an
     *         initialization call)
     * @throws SQLException if the database could be neither opened or created
     */

    public NotesDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }
   
    public void close() {
        mDbHelper.close();
    }


    /**
     * Create a new note using the title and body provided. If the note is
     * successfully created return the new rowId for that note, otherwise return
     * a -1 to indicate failure.
     *
     * @param title the title of the note
     * @param body the body of the note
     * @return rowId or -1 if failed
     */

    public long createNote(String title, String body) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_BODY, body);

        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }

    /**
     * Delete the note with the given rowId
     *
     * @param rowId id of note to delete
     * @return true if deleted, false otherwise
     */

    public boolean deleteNote(long rowId) {

        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    /**
     * Return a Cursor over the list of all notes in the database
     *
     * @return Cursor over all notes
     */

    public Cursor fetchAllNotes() {

        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
                KEY_BODY}, null, null, null, null, null);
    }

    /**
     * Return a Cursor positioned at the note that matches the given rowId
     *
     * @param rowId id of note to retrieve
     * @return Cursor positioned to matching note, if found
     * @throws SQLException if note could not be found/retrieved
     */

    public Cursor fetchNote(long rowId) throws SQLException {

        Cursor mCursor =

                mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                        KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
                        null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;

    }

    /**
     * Update the note using the details provided. The note to be updated is
     * specified using the rowId, and it is altered to use the title and body
     * values passed in
     *
     * @param rowId id of note to update
     * @param title value to set note title to
     * @param body value to set note body to
     * @return true if the note was successfully updated, false otherwise
     */

    public boolean updateNote(long rowId, String title, String body) {
        ContentValues args = new ContentValues();
        args.put(KEY_TITLE, title);
        args.put(KEY_BODY, body);

        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }
}

a quanto ho capito, il metodo di SQLiteOpenHelper fa questo.
se lo sovrascrivi, puoi fargli un po quello che vuoi! (qui elimina una tabella).

spero di essere stato di aiuto!

Michele

p.s.
se ho detto qualche cavolata spero di essere perdonato e soprattutto corretto :D

Offline strike76

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid
  • Play Store ID:
    Paolo Quattrociocchi
Re:Aggiornamento applicazione dal market e gestione DB
« Risposta #4 il: 19 Aprile 2010, 09:46:00 CEST »
0
grazie Michele !!!!! adesso mi metto a studiare  :-)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Aggiornamento applicazione dal market e gestione DB
« Risposta #5 il: 20 Aprile 2010, 16:06:27 CEST »
0
Si può mettere [RISOLTO] nel titolo? :)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline strike76

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid
  • Play Store ID:
    Paolo Quattrociocchi
Re:Aggiornamento applicazione dal market e gestione DB
« Risposta #6 il: 21 Aprile 2010, 11:10:54 CEST »
0
Ciao JD non ancora, la soluzione dovrebbe essere questa, ma in debug non riesco a far scattare il metodo onupdate  :-(