Autore Topic: no such column  (Letto 590 volte)

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
no such column
« il: 20 Agosto 2015, 00:52:57 CEST »
0
Salve a tutti,
mi sono avventurato nella gestione di un database SQLite giusto perchè non lo avevo ancora preso in considerazione fino ad ora nei miei test ma sono giorni che mi trovo di fronte un errore per il quale non riesco  a venirne a capo, inserisco di seguito il logcat:

Codice: [Seleziona]
    Process: it.cameratest.free.michelepisani.cameratest, PID: 1368
    android.database.sqlite.SQLiteException: no such column: picture_keyword (code 1): , while compiling: SELECT count(*) as cnt FROM pictures_keywords_list WHERE picture_keyword = 'pippo' AND picture_name = 'my_image.jpg'
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
            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:1440)
            at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1379)
            at it.cameratest.free.michelepisani.cameratest.DatabasePicturesKeywords.getCountKeywordsByPictureName(DatabasePicturesKeywords.java:110)
            at it.cameratest.free.michelepisani.cameratest.FileActivity$2.onClick(FileActivity.java:126)
            at android.view.View.performClick(View.java:5197)
            at android.view.View$PerformClick.run(View.java:20926)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5944)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

Il database è composto da due tabelle ma non capisco il motivo per cui mi dà errore su quella colonna. Ho provato a cambiarle il nome disinstallando l'app e reinstallandola ma niente.

Il campo picture_name è presente sia nella prima che nella seconda tabella, mentre picture_keyword solo nella seconda.

Lo stesso errore me lo dà sullo stesso campo anche per altre query come ad esempio:

Codice: [Seleziona]
android.database.sqlite.SQLiteException: no such column: picture_keyword (code 1): , while compiling: DELETE FROM pictures_keywords_list WHERE picture_name='pippo' and picture_keyword='my_image.jpg'
Nel DBHelper le tabelle le creo:

Codice: [Seleziona]
        @Override
        public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
            _db.execSQL(PICTURES_TABLE_CREATE);
            _db.execSQL(PICTURES_KEYWORDS_TABLE_CREATE);
        }

Ovviamente le due variabili contengono le stringhe "create table if exists...".

Devo dire inoltre che ho riscontrato un'anomalia come se ci fosse un problema nella seconda tabella o meglio come se considerasse solo la prima per tutte le query anche se utilizzo i riferimenti alla seconda, tant'è che mi è venuto il dubbio che più di una tabella non si possa utilizzare ma mi parrebbe molto strano e limitativo.

Qualcuno ha dei suggerimenti o si è trovato in una situazione simile?  o_O
Grazie in anticipo.
« Ultima modifica: 20 Agosto 2015, 00:55:59 CEST da Androi-dé! »

Offline iClaude

  • Utente normale
  • ***
  • Post: 242
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:no such column
« Risposta #1 il: 20 Agosto 2015, 11:35:44 CEST »
0
Puoi specificare le stringhe di creazione delle tabelle?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:no such column
« Risposta #2 il: 20 Agosto 2015, 16:32:43 CEST »
0
Io in sql normale "php su altervista per intenderci", dovevo specificare NOMETABELLA.nomeColonna altrimenti non andava in caso di colonne con nomi uguali

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:no such column
« Risposta #3 il: 21 Agosto 2015, 09:32:33 CEST »
0
Eccomi scusate il ritardo, ho risolto e l'errore era di una banalità assoluta e la stanchezza mi ha giocato uno scherzetto.
In pratica ripensandoci a mente fredda mi tornava strano il perchè mi venisse dato l'errore su un campo ma non sull'altro, senza considerare che 2 giorni prima le query parevano funzionare correttamente, ed in effetti era così.
Il problema: evidentemente un Ctrl Z di troppo che mi ha ripristinato il nome della tabella nella stringa di creazione che avevo copiato e incollato dalla tabella precedente. Quindi le due tabelle avevano lo stesso nome ed il "if not exists" non creava ovviamente la seconda. Il nome dell'altro campo era presente sia nella prima che nella seconda tabella per cui su quello non dava errore perchè lo riconosceva (anche se in realtà puntava all'altra classe statica di variabili).
Quindi un falso allarme, scusate il disturbo ma non essendomi mai adentrato in SQLite mi sono venuti dubbi sulla sua funzionalità che in realtà non avevano motivo di esistere.  :-P