CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: carotix con ben 12 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 26 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

esecuzione query su db Sqlite manda in crash l'applicazione

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    4

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    esecuzione query su db Sqlite manda in crash l'applicazione

    Ciao a tutti, come da oggetto (forse non propriamente chiaro) ho un problema con il seguente codice e non riesco a venirne a capo.
    In pratica pur essendo presenti i dati richiesti non li trova.

    Qui di seguito trovate il metodo definito nella classe che estende SQLiteOpenHelper e che mi genera il crash.
    Ciò che vorrei fare è che per ogni tipo di fondamentale di ciascun giocatore calcoli quanti ne sono stati eseguiti. Ovviamente non è detto che tutti i giocatori eseguano tutti i fondamentali disponibili, quindi setto il valore per quel fondamentale a 0.
     
    1
    2
            public int getCountFondamentaleG(int idGiocatore, String fondamentale) {
    3
                String selectQuery = "SELECT * FROM app_statistiche WHERE id_giocatore = " + idGiocatore + " 
    4
                                                                                AND tipo_fondamentale = " + fondamentale;
    5
                SQLiteDatabase db = this.getReadableDatabase();
    6
                Cursor cursor = db.rawQuery(selectQuery, null);
    7
                int counter = 0;
    8
                
    9
                if(cursor != null)
    10
                {
    11
                    cursor.moveToFirst();
    12
                    counter = cursor.getCount();
    13
                }
    14
                cursor.close();
    15
                // return numero row
    16
                return counter;
    17
            }
    18


    Questa l'activity (il layout contiene semplicemente una textview statica, visualizzo su LogCat i risultati desiderati)
    60
     
    1
    2
    public class StatisticheActivity extends Activity {
    3
        /** Called when the activity is first created. */
    4
              public void onCreate(Bundle savedInstanceState) {
    5
            super.onCreate(savedInstanceState);
    6
            setContentView(R.layout.main);
    7
    8
      
    9
            DbHandler db = new DbHandler(this);
    10
            List<Statistica> statistics = db.getAllRecords();       
    11
     
    12
            for (Statistica stt : statistics) {
    13
                String log = "Id: "+stt.getID()+" ,idGiocatore: " + stt.getIdGiocatore() + " ,Fondamentale: " +
    14
                                       stt.getTipoFondamentale() + " ,Val: " + stt.getVal() + " ,set: " + stt.getNumSet();
    15
                    // Writing Contacts to log
    16
            Log.d("Name: ", log);
    17
            
    18
            }
    19
            
    20
            int allRow = db.getStatsCount();
    21
            Log.d("Numero righe: ", Integer.toString(allRow));
    22
            
    23
            //Cerco per ogni giocatore i fondamentali che ha fatto
    24
            List<Statistica> lGiocatori = db.getGiocatore();
    25
            for(Statistica stt : lGiocatori) {
    26
                String tmp = "idGiocatore: " + stt.getIdGiocatore();
    27
                Log.d("Trovato: ", tmp);
    28
                //List<Statistica>lista = db.getFondamentale();
    29
                List<Statistica>lista = db.getFondamentaleG(stt.getIdGiocatore());
    30
                ArrayList<String> array = new ArrayList<String>();
    31
                for(int i=0; i<lista.size(); i++)
    32
                {
    33
                    array.add(lista.get(i).getTipoFondamentale());
    34
                    System.err.println(array.get(i));
    35
                }
    36
            }
    37
            
    38
            //stampo a video tutti i tipo_fondamentale in tabella
    39
            List<Statistica> lFondamentali = db.getFondamentale();
    40
            for(Statistica stt : lFondamentali) {
    41
                String tmp = "tipoFondamentale: " + stt.getTipoFondamentale();
    42
                Log.d("Trovato: ", tmp);
    43
            }
    44
    //Cerco per ogni giocatore per ogni fondamentale quanti ne ha fatti
    45
            List<Statistica> lGiocatoriB = db.getGiocatore();
    46
            List<Statistica> lFondamentaliB = db.getFondamentale();
    47
            for(Statistica sttG : lGiocatoriB) {
    48
                for(Statistica sttF : lFondamentaliB) {
    49
                    String tmp = "idGiocatore: " + sttG.getIdGiocatore() + " fondamentale: " + sttF.getTipoFondamentale();
    50
                    Log.d("Trovato: ", tmp);
    51
                    //List<Statistica>lista = db.getFondamentale();
    52
                    int count = db.getCountFondamentaleG(sttG.getIdGiocatore(), sttF.getTipoFondamentale());
    53
                    String tmp1 = "idGiocatore: " + sttG.getIdGiocatore() + "fondamentale: " +
    54
                                                sttF.getTipoFondamentale() + "#: " + count;
    55
                    Log.d("Trovato: ", tmp1);       
    56
                }
    57
            }
    58
        }
    59
    }
    60

  2.  
  3. #2
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    4

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    ovviamente ecco il log relativo al problema.
    Ho allegato quello completo dell'activity in cui si vede che i dati ci sono

    codice:
    06-15 13:23:29.320: D/Trovato:(1029): idGiocatore: 21 fondamentale: battuta
    06-15 13:23:29.330: E/SQLiteLog(1029): (1) no such column: battuta
    06-15 13:23:29.360: D/AndroidRuntime(1029): Shutting down VM
    06-15 13:23:29.360: W/dalvikvm(1029): threadid=1: thread exiting with uncaught exception (group=0x41465700)
    06-15 13:23:29.430: E/AndroidRuntime(1029): FATAL EXCEPTION: main
    06-15 13:23:29.430: E/AndroidRuntime(1029): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.rosa.android.dbstatistiche/it.rosa.android.dbstatistiche.StatisticheActivity}: android.database.sqlite.SQLiteException: no such column: battuta (code 1): , while compiling: SELECT * FROM app_statistiche WHERE id_giocatore = 21 AND tipo_fondamentale = battuta
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.ActivityThread.access$600(ActivityThread.java:141)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.os.Looper.loop(Looper.java:137)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at java.lang.reflect.Method.invokeNative(Native Method)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at java.lang.reflect.Method.invoke(Method.java:525)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at dalvik.system.NativeStart.main(Native Method)
    06-15 13:23:29.430: E/AndroidRuntime(1029): Caused by: android.database.sqlite.SQLiteException: no such column: battuta (code 1): , while compiling: SELECT * FROM app_statistiche WHERE id_giocatore = 21 AND tipo_fondamentale = battuta
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at it.rosa.android.dbstatistiche.DbHandler.getCountFondamentaleG(DbHandler.java:162)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at it.rosa.android.dbstatistiche.StatisticheActivity.onCreate(StatisticheActivity.java:107)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.Activity.performCreate(Activity.java:5133)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    06-15 13:23:29.430: E/AndroidRuntime(1029): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
    log1.txt

  4. #3
    Baby Droid


    Registrato dal
    Apr 2014
    Messaggi
    4

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Sorry.
    Tutto risolto, non appena ho avviato la discussione ho avuto l'illuminazione sul fatto che se ho la clausola WHERE non è rawQuery(selectQuery, null) ma rawQuery(selectQuery, paramsarray).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy