Autore Topic: Errrore no such columns database  (Letto 305 volte)

Offline Dr.Joek

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Emulatore a gogo
  • Sistema operativo:
    Windows7, Windows8.1, Ubuntu15.3, Windows10
Errrore no such columns database
« il: 25 Settembre 2015, 09:44:01 CEST »
0
E' da 2 giorni che provo di risolvere questo problema da cui non riesco a venir a caspo, quando provo a leggere il database mi restituisce l'errore no such columns, spero che qualcuno di voi mi aiuti a risolvere il problema.

LogCat
Codice (XML): [Seleziona]
    at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.database.sqlite.SQLiteException: no such column: user_figura1 (code 1): , while compiling: SELECT user_figura1, user_figura2 FROM TABELLA1
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
            at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
            at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
            at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
            at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
            at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
            at com.example.gioele.mathup.LocalDB2Helper.getInformations(LocalDB2Helper.java:60)
            at com.example.gioele.mathup.seleziona1.onCreate(seleziona1.java:98)
            at android.app.Activity.performCreate(Activity.java:5008)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
            at android.app.ActivityThread.access$600(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

HelperDatabase
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

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

import java.util.Vector;

/**
 * Created by Gioele on 24/09/2015.
 */

public class LocalDB2Helper extends SQLiteOpenHelper {
    //--------------inizializzazione/creazione database------------------------------------------------------------
    private static final String DATABASE_NAME = "linguaggiodb";
    private static final int DATABASE_VERSIONS = 1;
    private static final String CREATE_QUERY =
            "CREATE TABLE "+ LocalDB1.tabella1.TABLE_NAME+" (" +
                    LocalDB2.tabella1.USER_FIGURA1 + " TEXT,"+
                    LocalDB2.tabella1.USER_FIGURA2 + " TEXT) ;";






    public LocalDB2Helper(Context context)
    {
        super(context,DATABASE_NAME,null,DATABASE_VERSIONS);
        Log.e("DATABASE OPERATIONS", "Database create / opened.....");
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_QUERY);
        Log.e("DATABASE OPERATIONS", "Table created");

    }
    //------------comandi: leggi, scrivi----------------------------------------------------------------------
    //scrivi
    public void addInformation(String user_figura1, String user_figura2, SQLiteDatabase db)
    {
        ContentValues contentValues = new ContentValues();
        contentValues.put(LocalDB2.tabella1.USER_FIGURA1,user_figura1);
        contentValues.put(LocalDB2.tabella1.USER_FIGURA2,user_figura2);

        db.insert(LocalDB2.tabella1.TABLE_NAME, null, contentValues);
        Log.e("DATABASE OPERATIONS", "One row inserted");

    }
    //leggi
    public Cursor getInformations(SQLiteDatabase db) {
        Log.e("DATABASE OPERATIONS", "AVVIATO");
        Cursor cursor;
        final String[] uno = {LocalDB2.tabella1.USER_FIGURA1,
                LocalDB2.tabella1.USER_FIGURA2,

        };
        Cursor c = db.query(LocalDB2.tabella1.TABLE_NAME, uno, null, null, null, null, null);
        return c;

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

MainActivity.java(solo parte interessata)
Codice (Java): [Seleziona]
final ListView listview1 = (ListView) findViewById(R.id.listview);
            listDataAdapter = new ListDataAdapter(getApplicationContext(),R.layout.tabella2);
            listview1.setAdapter(listDataAdapter);
            LocalDB2Helper = new LocalDB2Helper(getApplicationContext());
            SQLiteDatabase = LocalDB2Helper.getReadableDatabase();
            cursor = LocalDB2Helper.getInformations(SQLiteDatabase);
            if (cursor.moveToFirst()) {
                do{
                    int user1=c.getColumnIndex(LocalDB2.tabella1.USER_FIGURA1);
                    int user2=c.getColumnIndex(LocalDB2.tabella1.USER_FIGURA2);
                    String user_figura1, user_figura2;
                    user_figura1 = cursor.getString(0);
                    user_figura2 = cursor.getString(1);
                    DataProvider dataProvider = new DataProvider(user_figura1, user_figura2);
                    listDataAdapter.add(dataProvider);

                }while (cursor.moveToNext());
            }

Io non capisco dov'è il problema, mi potreste aiutare?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errrore no such columns database
« Risposta #1 il: 25 Settembre 2015, 10:33:21 CEST »
+1
Una delle cause più tipiche è che tu abbia modificato la struttura della tabella durante varie prove della tua app, per cui la tabella è stata creata senza quella colonna, poi tu l'hai aggiunta, ma il database non è stato ricreato con la nuova struttura (perchè esiste già).

Prova a fare uninstall dell'app e installala di nuovo, così da far eseguire il codice di creazione della tabella.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dr.Joek

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Emulatore a gogo
  • Sistema operativo:
    Windows7, Windows8.1, Ubuntu15.3, Windows10
Re:Errrore no such columns database
« Risposta #2 il: 25 Settembre 2015, 16:02:44 CEST »
0
Una delle cause più tipiche è che tu abbia modificato la struttura della tabella durante varie prove della tua app, per cui la tabella è stata creata senza quella colonna, poi tu l'hai aggiunta, ma il database non è stato ricreato con la nuova struttura (perchè esiste già).

Prova a fare uninstall dell'app e installala di nuovo, così da far eseguire il codice di creazione della tabella.

Grazie della riposta Bradipao, comunque il problema non è quello detto da te dato che ogni test l'ho fatto su un emulatore differente.
Il problema viene quando si crea la tabella a quanto pare.
Infatti (cosa che non avevo notato prima) quando si crea la tabella da un'errore
Codice (XML): [Seleziona]
09-25 13:40:37.973    1676-1676/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ Database create / opened.....
09-25 13:40:37.973    1676-1676/com.example.gioele.mathup E/SQLiteLog﹕ (1) no such table: TABELLA2
09-25 13:40:37.973    1676-1676/com.example.gioele.mathup E/SQLiteDatabase﹕ Error inserting user_figura2=Rombo user_figura1=Piramide
    android.database.sqlite.SQLiteException: no such table: TABELLA2 (code 1): , while compiling: INSERT INTO TABELLA2(user_figura2,user_figura1) VALUES (?,?)
Quindi a quanto pare il problema è nello scrivere no nel leggere, si può fare qualcosa?
Può darsi che il problema sia che esistono due database e quindi creando il primo database il sistema ritiene inutile creare il secondo?
Primo database
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

/**
 * Created by Gioele on 13/07/2015.
 */

public class LocalDB1 {


    public static abstract class tabella1{
        public static final String TABLE_NAME = "TABELLA1";
        public static final String USER_LINGUAGGIO = "user_linguaggio";








    }
}
Secondo database
Codice (Java): [Seleziona]
package com.example.gioele.mathup;

/**
 * Created by Gioele on 25/09/2015.
 */

public class LocalDB2 {

    public static abstract class tabella1 {
        public static final String TABLE_NAME = "TABELLA2";
        public static final String USER_FIGURA1 = "user_figura1";
        public static final String USER_FIGURA2 = "user_figura2";
        public static final String SCRITTA_1 = "scritta_1";
        public static final String SCRITTA_2 = "scritta_2";
        public static final String SCRITTA_3 = "scritta_3";
        public static final String SCRITTA_4 = "scritta_4";
        public static final String SCRITTA_5 = "scritta_5";
        public static final String SCRITTA_6 = "scritta_6";
        public static final String SCRITTA_7 = "scritta_7";
        public static final String SCRITTA_8 = "scritta_8";
        public static final String SCRITTA_9 = "scritta_9";
        public static final String SCRITTA_10 = "scritta_10";
        public static final String SCRITTA_11 = "scritta_11";
        public static final String SCRITTA_12 = "scritta_12";
        public static final String SCRITTA_13 = "scritta_13";
        public static final String SCRITTA_14 = "scritta_14";
        public static final String SCRITTA_15 = "scritta_15";
        public static final String SCRITTA_16 = "scritta_16";
        public static final String SCRITTA_17 = "scritta_17";
        public static final String SCRITTA_18 = "scritta_18";
        public static final String SCRITTA_19 = "scritta_19";
        public static final String SCRITTA_20 = "scritta_20";
        public static final String SCRITTA_21 = "scritta_21";
        public static final String SCRITTA_22 = "scritta_22";
        public static final String R1 = "r_1";
        public static final String R2 = "r_2";
        public static final String R3 = "r_3";
        public static final String R4 = "r_4";
        public static final String R5 = "r_5";
        public static final String R6 = "r_6";
        public static final String R7 = "r_7";
        public static final String R8 = "r_8";
        public static final String R9 = "r_9";
        public static final String R10 = "r_10";
        public static final String R11 = "r_11";
        public static final String R12 = "r_12";
        public static final String R13 = "r_13";
        public static final String R14 = "r_14";
        public static final String R15 = "r_15";
        public static final String R16 = "r_16";
        public static final String R17 = "r_17";
        public static final String R18 = "r_18";
        public static final String R19 = "r_19";
        public static final String R20 = "r_20";
        public static final String R21 = "r_21";
        public static final String R22 = "r_22";
        public static final String RR1 = "rr_1";
        public static final String RR2 = "rr_2";
        public static final String RR3 = "rr_3";
        public static final String RR4 = "rr_4";
        public static final String RR5 = "rr_5";
        public static final String RR6 = "rr_6";
        public static final String RR7 = "rr_7";
        public static final String RR8 = "rr_8";
        public static final String RR9 = "rr_9";
        public static final String RR10 = "rr_10";
        public static final String RR11 = "rr_11";
        public static final String RR12 = "rr_12";
        public static final String RR13 = "rr_13";
        public static final String RR14 = "rr_14";
        public static final String RR15 = "rr_15";
        public static final String RR16 = "rr_16";
        public static final String RR17 = "rr_17";
        public static final String RR18 = "rr_18";
        public static final String RR19 = "rr_19";
        public static final String RR20 = "rr_20";
        public static final String RR21 = "rr_21";
        public static final String RR22 = "rr_22";
        public static final String LETTERA1 = "lettera_1";
        public static final String LETTERA2 = "lettera_2";
        public static final String LETTERA3 = "lettera_3";
        public static final String LETTERA4 = "lettera_4";
        public static final String LETTERA5 = "lettera_5";
        public static final String LETTERA6 = "lettera_6";
        public static final String LETTERA7 = "lettera_7";
        public static final String LETTERA8 = "lettera_8";
        public static final String LETTERA9 = "lettera_9";
        public static final String LETTERA10 = "lettera_10";
        public static final String LETTERA11 = "lettera_11";
        public static final String LETTERA12 = "lettera_12";
        public static final String LETTERA13 = "lettera_13";
        public static final String LETTERA14 = "lettera_14";
        public static final String LETTERA15 = "lettera_15";
        public static final String LETTERA16 = "lettera_16";
        public static final String LETTERA17 = "lettera_17";
        public static final String LETTERA18 = "lettera_18";
        public static final String LETTERA19 = "lettera_19";
        public static final String LETTERA20 = "lettera_20";
        public static final String LETTERA21 = "lettera_21";
        public static final String LETTERA22 = "lettera_22";
        public static final String L1 = "l_1";
        public static final String L2 = "l_2";
        public static final String L3 = "l_3";
        public static final String L4 = "l_4";
        public static final String L5 = "l_5";
        public static final String L6 = "l_6";
        public static final String L7 = "l_7";
        public static final String L8 = "l_8";
        public static final String L9 = "l_9";
        public static final String L10 = "l_10";
        public static final String L11 = "l_11";
        public static final String L12 = "l_12";
        public static final String L13 = "l_13";
        public static final String L14 = "l_14";
        public static final String L15 = "l_15";
        public static final String L16 = "l_16";
        public static final String L17 = "l_17";
        public static final String L18 = "l_18";
        public static final String L19 = "l_19";
        public static final String L20 = "l_20";
        public static final String L21 = "l_21";
        public static final String L22 = "l_22";
    }

}
« Ultima modifica: 25 Settembre 2015, 16:23:42 CEST da Dr.Joek »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errrore no such columns database
« Risposta #3 il: 25 Settembre 2015, 17:30:31 CEST »
+1
Dal codice parziale che hai postato non si vede se crei correttamente entrambe le tabelle. Potresti non crearla proprio, per questo non te la prova.

Ma puoi verificare in modo molto semplice: scarica il database dall'emulatore (con adb pull, trovi l'help nella documentazione ufficiale) ed aprilo con un sqlite browser (io uso quello addon di firefox).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dr.Joek

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Emulatore a gogo
  • Sistema operativo:
    Windows7, Windows8.1, Ubuntu15.3, Windows10
Re:Errrore no such columns database
« Risposta #4 il: 25 Settembre 2015, 17:58:11 CEST »
0
Grazie Bradipao delle risposte, comunque ho risolto.