Autore Topic: Come popolare un db sqllite con SQLLite Database Browser  (Letto 1000 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come popolare un db sqllite con SQLLite Database Browser
« il: 09 Settembre 2010, 16:15:49 CEST »
0
Sto usando un db sqllite con la mia app
Per inserire i dati uso il programma SQLLite Database Browser
il problema è questo, devo inserire circa 1000 righe e volevo automatizzare il processo perchè inserire 1000 insert diventa una follia
come posso fare?
I dati da inserire li ho in un file .txt, ogni record è separato da una virgola

La tabella da popolare (già creata con una decinda di record), ha questa struttura
nome,cognome,indirizzo,cap
I dati da importare sono dentro un file .txt nel seguente modo:

"andrea","pluto","bla bla bal","15"
"fabio","pluto","bla bla bal","15"
"marco","pluto","bla bla bal","15"
ecc...

Il programma permette di importare una tabella ma quando ci provo il programma crasha senza dire il perchè
qualcuno ha mai provato?
« Ultima modifica: 09 Settembre 2010, 17:15:44 CEST da JD »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come popolare un db sqllite con SQLLite Database Browser
« Risposta #1 il: 09 Settembre 2010, 19:38:09 CEST »
0
Dai su, un po' di intraprendenza :)

Puoi crearti un piccolo script in java,c# o quel che vuoi che ti fa questo lavoro oppure carichi il tuo file su android e scrivi una piccola applicazione :)


Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come popolare un db sqllite con SQLLite Database Browser
« Risposta #2 il: 10 Settembre 2010, 08:37:44 CEST »
0
Ciao Ricky
allora ho scritto un metodo dentro una classe della mia app che legge il mio file di testo e popola il db, funziona tutto ma c'è un problema che non so risolvere
Il programma mi popola il database che si trova in data\data\it.myapp\database
ma io devo popolare il database che si trova dentro \assets altrimenti ogni volta che lancio la mia app (che come prima cosa copia il db dalla cartella assets alla cartella data\data\it.myapp\database) mi perdo gli inserimenti
Dentro la mia classe è definita la seguente variabile:
private static String DB_PATH = "/data/data/it.myapp/databases/";
ho provato a cambiarla in
private static String DB_PATH = "/assets/";
ma ovviamente mi dice che non trova il db
come posso fare?

questo è il metodo che uso per aprire il db ed inserire i dati


Codice (Java): [Seleziona]
private static String DB_PATH = "/data/data/it.myapp/databases/";

        private static String DB_NAME = "db";

        private SQLiteDatabase myDataBase;

        private final Context myContext;

        String tableName = "prova";


        public Database(Context context) {

                super(context, DB_NAME, null, 1);
                this.myContext = context;
        }

/**
         * Copies your database from your local assets-folder to the just created
         * empty database in the system folder, from where it can be accessed and
         * handled. This is done by transfering bytestream.
         * */

        private void copyDataBase() throws IOException {

                // Open your local db as the input stream
                InputStream myInput = myContext.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);

                // transfer bytes from the inputfile to the outputfile
                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer)) > 0) {
                        myOutput.write(buffer, 0, length);
                }

                // Close the streams
                myOutput.flush();
                myOutput.close();
                myInput.close();

        }


        public void openDataBase() throws SQLException {

                try {

                        // Open the database
                        String myPath = DB_PATH + DB_NAME;
                        myDataBase = SQLiteDatabase.openDatabase(myPath, null,
                                        SQLiteDatabase.OPEN_READWRITE);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        public void insertMyValue() {
                ContentValues myValues = new ContentValues();
                myValues.put("domanda", "prova");
                myValues.put("risposta1", "Ciao");
                //l'id viene creato in automatico
                //myValues.put("_id", Long.toString(13));
                try {
                        myDataBase.insertOrThrow(tableNameQuiz, null, myValues);
                } catch (Exception e) {
                        e.printStackTrace();
                }

        }