Autore Topic: errore sqlite  (Letto 626 volte)

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
errore sqlite
« il: 19 Gennaio 2012, 16:55:08 CET »
0
salve a tutti, ho un piccolo problema...
ho creato la mia app e sull'emulatore funziona perfettamente, ma quando la metto sul mio dispositivo arriva la simpatica eccezione

Codice: [Seleziona]
Caused by: android.database.sqlite.SQLiteException: unable to open database file
la riga d'errore è la seguente:
Codice: [Seleziona]
db = SQLiteDatabase.openOrCreateDatabase(db_default, null);
dove db_default è inizializzata con:

Codice: [Seleziona]
                        db_default = "data/data/it.lap2.project.Aprof/databases/"+ dbName;
spero che qualcuno riesca a darmi celermente una mano  :-(

grazie a tutti anticipatamente!!!

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:errore sqlite
« Risposta #1 il: 20 Gennaio 2012, 10:08:18 CET »
0
nessuno può aiutarmi??? da cosa può dipendere?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:errore sqlite
« Risposta #2 il: 20 Gennaio 2012, 11:19:01 CET »
0
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:errore sqlite
« Risposta #3 il: 20 Gennaio 2012, 11:22:09 CET »
0
non mi sei molto d'aiuto in questo modo... so dell'esistenza dei tutorial e anche dei libri che già leggo...
volevo solo capire quale poteva essere il motivo per il quale sull'emulatore funziona mentre sul dispositivo no!

grazie cmq per la risp

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:errore sqlite
« Risposta #4 il: 20 Gennaio 2012, 11:44:15 CET »
0
Perchè metti tutto il path e non solo il nome del db? dovrebbe essere sufficiente.

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:errore sqlite
« Risposta #5 il: 20 Gennaio 2012, 13:50:36 CET »
0
Perchè metti tutto il path e non solo il nome del db? dovrebbe essere sufficiente.

prima effettuavo le operazioni nel database in una classe estesa activity (e funzionava usando solo il nome del db, anche nel dispositivo). Poi però ho fatto alcune rettifiche per separare la programmazione dalla visualizzazione e quindi ho preferito inserire  le operazioni del db in una classe specifica. Da quel momento ha smesso di funzionare e leggendo qua e la ho capito che dovevo modificare la stringa del db inserendo ttt il path... ho risolto per quanto riguarda l'emulatore ma non xk non funziona sul dispositivo

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:errore sqlite
« Risposta #6 il: 20 Gennaio 2012, 14:03:35 CET »
0
prima effettuavo le operazioni nel database in una classe estesa activity (e funzionava usando solo il nome del db, anche nel dispositivo). Poi però ho fatto alcune rettifiche per separare la programmazione dalla visualizzazione e quindi ho preferito inserire  le operazioni del db in una classe specifica. Da quel momento ha smesso di funzionare e leggendo qua e la ho capito che dovevo modificare la stringa del db inserendo ttt il path... ho risolto per quanto riguarda l'emulatore ma non xk non funziona sul dispositivo

Io non mai specificato tutto il path sempre e solo il nome del db.
Non capisco cosa c'entra che se sposti la logica di accesso al db in una classe apposita devi mettere il path completo.


Off-Topic:
Potresti scrivere senza abbreviazioni? ;)

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:errore sqlite
« Risposta #7 il: 20 Gennaio 2012, 15:31:13 CET »
0
Intanto scusa mi per le abbreviazioni  :-[

Non so veramente perché non funzioni... so soltanto che il quel modo non funziona e così si...
se vuoi dare un'occhiata eccoti la classe, magari riusciamo a capirci meglio

Codice: [Seleziona]
public class MyDatabase {
       
        //gestione database
        private static SQLiteDatabase db;
        //utilizzato per le insert nel db
        private static ContentValues cValues;
       
        //intero che viene utilizzato per differenziare i nomi delle variabili che rappresentano i db creati all'interno delle preferenze
        public static int num_db =0;
        //nome del db di default
        private static String db_default="";
       
       
        public static void setNameDb(String dbName){
                db_default = "data/data/it.lap2.project.Aprof/databases/"+ dbName;
        }
       
        public static String getNameDb(){
                return db_default;
        }
       
        //definisco le tabelle che devono essere create ogni volta che creo un nuovo database
        public static void createTables(){               
                 db = SQLiteDatabase.openOrCreateDatabase(db_default, null);
                try{
                        //tabella STUDENTI
                        db.execSQL("create table if not exists Studenti" +
                                        "(_id nvarchar(4) not null, nome nvarchar(15), " +
                                        "cognome nvarchar(15), classe nvarchar(5), indirizzo nvarchar(100), " +
                                        "telefono nvarchar(30), email nvarchar(50),  varie nvarchar(100), " +
                                        "foto nvarchar(100), primary key(_id));");
                       
                        //tabella ASSENZE
                        db.execSQL("create table if not exists Assenze " +
                                        "(alunno nvarchar(5) not null, data date not null, " +
                                        "attività nvarchar(5) not null, numOre smallint);");
                        //        "primary key(idAlunno, data, idLezione));");
                       
                        //tabella CLASSI
                        db.execSQL("create table if not exists Classi " +
                                        "(anno numeric, sezione nchar(5), " +
                                        "corso nvarchar(15), idClasse nvarchar(5) not null, " +
                                        "primary key(idClasse));");
                       
                        //tabella MATERIE
                        db.execSQL("create table if not exists Materie " +
                                        "(idMateria nvarchar(5) not null, nome nvarchar(20), " +
                                        "primary key(idMateria));");
                       
                        //tabella ORARIO
                        db.execSQL("create table if not exists Orario" +
                                        "(giornoSett nvarchar(10) not null, numOra nvarchar(2) not null, " +
                                        "tot int, classe nvarchar(5), materia nvarchar(5), " +
                                        "primary key(giornoSett, numOra));");
                       
                        //tabella PERIODI
                        db.execSQL("create table if not exists Periodi " +
                                        "(periodo nvarchar(20), idPeriodo nvarchar(5) not null, " +
                                        "scadenza nvarchar(10), inizio nvarchar(10), " +
                                        "primary key(idPeriodo));");
                       
                        //tabella SETTING ORARIO
                        db.execSQL("create table if not exists SettingOrario" +
                                        "(numOra varchar(2) not null, o_inizio int, " +
                                        "m_inizio int, o_fine int, m_fine int, " +
                                        "primary key(numOra));");
                       
                        //tabella VERIFICHE
                        db.execSQL("create table if not exists Verifiche " +
                                        "(data date not null, voto float, alunno nvarchar(5) not null, " +
                                        "materia nvarchar(5) not null, tipo nvarchar(15) not null, argomento nvarchar(50), periodo nvarchar(5) not null, " +
                                        "primary key(data, alunno, materia, tipo));");
                       
                        //tabella ATTIVITA
                        db.execSQL("create table if not exists Attività " +
                                        "(idAttività int not null, descrizione nvarchar(100), " +
                                        "data date, classe nvarchar(5), materia nvarchar(5), " +
                                        "argomento nvarchar(100), primary key(idAttività));");
                }
                catch(SQLiteException e){
                        e.printStackTrace();
                }
                db.close();
        }
}

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:errore sqlite
« Risposta #8 il: 20 Gennaio 2012, 15:32:56 CET »
0
e questo è il logcat facendo come dici tu:

Codice: [Seleziona]
01-20 15:32:23.109: I/Database(24907): sqlite returned: error code = 14, msg = cannot open file at source line 25467
01-20 15:32:23.119: E/Database(24907): sqlite3_open_v2("2011-2012.db", &handle, 6, NULL) failed
01-20 15:32:23.129: D/AndroidRuntime(24907): Shutting down VM
01-20 15:32:23.139: W/dalvikvm(24907): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-20 15:32:23.159: E/AndroidRuntime(24907): FATAL EXCEPTION: main
01-20 15:32:23.159: E/AndroidRuntime(24907): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.lap2.project.Aprof/it.lap2.project.Aprof.AprofActivity}: android.database.sqlite.SQLiteException: unable to open database file
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.os.Handler.dispatchMessage(Handler.java:99)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.os.Looper.loop(Looper.java:123)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.ActivityThread.main(ActivityThread.java:3683)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at java.lang.reflect.Method.invokeNative(Native Method)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at java.lang.reflect.Method.invoke(Method.java:507)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at dalvik.system.NativeStart.main(Native Method)
01-20 15:32:23.159: E/AndroidRuntime(24907): Caused by: android.database.sqlite.SQLiteException: unable to open database file
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at it.lap2.project.Aprof.Database.MyDatabase.createTables(MyDatabase.java:41)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at it.lap2.project.Aprof.AprofActivity.onCreate(AprofActivity.java:73)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-20 15:32:23.159: E/AndroidRuntime(24907):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-20 15:32:23.159: E/AndroidRuntime(24907):         ... 11 more

Offline yoshi

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimu Black (P970)
  • Sistema operativo:
    Mac OS X 10.7
Re:errore sqlite
« Risposta #9 il: 22 Gennaio 2012, 21:48:40 CET »
0
allora ho capito che il problema deriva sicuramente da questa riga:

Codice (Java): [Seleziona]
db = SQLiteDatabase.openOrCreateDatabase(db_default, null);
quello che mi chiedo è: perché quando questo stesso metodo lo chiamo da una classe estesa activity posso usare:

Codice (Java): [Seleziona]
db = openOrCreateDatabase(db_default, null);
mentre dalla classe non estesa activity devo necessariamente anteporre "SQLiteDatabase????

anzi addirittura posso usare
Codice (Java): [Seleziona]
db = openOrCreateDatabase(db_default,Context.MODE_PRIVATE, null);
« Ultima modifica: 22 Gennaio 2012, 21:51:29 CET da yoshi »