Autore Topic: no such table  (Letto 409 volte)

Offline astro87

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola moto g
  • Sistema operativo:
    windows 7
no such table
« il: 07 Agosto 2014, 18:22:03 CEST »
0
salve a tutti, sto cercando di creare 2 tabelle in un database:
1) regioni
2)prodotti

gli inserimenti effettuati in tali tabelle li mostro nel file di log. Per la tabella regioni va tutto bene, mentre per prodotti mi da un no such table ( non so se non trova la tabella o i valori da inserire)

Codice (Java): [Seleziona]
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.LinkedList;
import java.util.List;

import com.hmkcode.android.Regione;

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;

public class MySQLiteHelper extends SQLiteOpenHelper {

        // Database Version
        private static final int DATABASE_VERSION = 1;
        // Database Name
        private static final String DATABASE_NAME = "Orto";

        public MySQLiteHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);  
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                // SQL statement per creare la tabella regoni
                String CREATE_REGIONE_TABLE = "CREATE TABLE regioni ( " +
                                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                                "nome TEXT, "+
                                "nazione TEXT )";
                //SQL statement per creare la tabella prodotti
                String CREATE_PRODOTTO_TABLE = "CREATE TABLE prodotti ( " +
                                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                                "nome TEXT, "+
                                "mese_semina TEXT )";
               
               

                // creole tabelle regione e prodotto
       
                db.execSQL(CREATE_REGIONE_TABLE);
                db.execSQL(CREATE_PRODOTTO_TABLE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                // Drop older regiones table if existed
                db.execSQL("DROP TABLE IF EXISTS regioni");
                db.execSQL("DROP TABLE IF EXISTS prodotti");
                // create fresh regiones table
                this.onCreate(db);
        }
        //---------------------------------------------------------------------

        /**
         * CRUD operations (create "add", read "get", update, delete) regione + get all regiones + delete all regiones
         */


        // Regiones table name
        private static final String TABLE_REGIONE = "regioni";
        //nome tabella prodotti
        private static final String TABLE_PRODOTTO = "prodotti";
       
        // Regiones Table Columns names
        private static final String KEY_ID = "id";
        private static final String KEY_NOME = "nome";
        private static final String KEY_NAZIONE = "nazione";
        //colonne tabella prdotto
       
        private static final String KEY_ID_PROD = "id";
        private static final String KEY_NOME_PROD = "nome";
        private static final String KEY_MESE_SEMINA = "mese_semina";
       

        private static final String[] COLUMNS = {KEY_ID,KEY_NOME,KEY_NAZIONE};
        private static final String[] COLUMNS_PROD = {KEY_ID_PROD,KEY_NOME_PROD,KEY_MESE_SEMINA};
       

        public void addRegione(Regione regione){
                Log.d("addRegione", regione.toString());
                // 1. get reference to writable DB
                SQLiteDatabase db = this.getWritableDatabase();

                // 2. create ContentValues to add key "column"/value
                ContentValues values = new ContentValues();
                values.put(KEY_NOME, regione.getRegione()); // get title
                values.put(KEY_NAZIONE, regione.getNazione()); // get author

                // 3. insert
                db.insert(TABLE_REGIONE, // table
                                null, //nullColumnHack
                                values); // key/value -> keys = column names/ values = column values

                // 4. close
                db.close();
        }
       
        public void addProdotto(Prodotto prodotto){
                Log.d("addProdotto", prodotto.toString());
                // 1. get reference to writable DB
                SQLiteDatabase db = this.getWritableDatabase();

                // 2. create ContentValues to add key "column"/value
                ContentValues values = new ContentValues();
                values.put(KEY_NOME, prodotto.getProdotto()); // get title
                values.put(KEY_MESE_SEMINA, prodotto.getMese_semina()); // get author

                // 3. insert
                db.insert(TABLE_PRODOTTO, // table
                                null, //nullColumnHack
                                values); // key/value -> keys = column names/ values = column values

                // 4. close
                db.close();
        }


L'errore è del tipo :
Codice: [Seleziona]
08-07 12:11:49.962: D/addProdotto(8078): Prodoto [id=0, prodotto=Pomodori, mese_semina=settembre]
08-07 12:11:50.042: E/SQLiteLog(8078): (1) no such table: prodotti
08-07 12:11:50.052: E/SQLiteDatabase(8078): Error inserting nazione=settembre nome=Pomodori
08-07 12:11:50.052: E/SQLiteDatabase(8078): android.database.sqlite.SQLiteException: no such table: prodotti (code 1): , while compiling: INSERT INTO prodotti(nazione,nome) VALUES (?,?)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at com.hmkcode.android.MySQLiteHelper.addProdotto(MySQLiteHelper.java:118)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at com.hmkcode.android.MainActivity.onCreate(MainActivity.java:22)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.Activity.performCreate(Activity.java:5231)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.os.Handler.dispatchMessage(Handler.java:102)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.os.Looper.loop(Looper.java:136)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at android.app.ActivityThread.main(ActivityThread.java:5017)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at java.lang.reflect.Method.invokeNative(Native Method)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at java.lang.reflect.Method.invoke(Method.java:515)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-07 12:11:50.052: E/SQLiteDatabase(8078):         at dalvik.system.NativeStart.main(Native Method)
08-07 12:11:50.062: D/addRegione(8078): Regione [id=0, regione=Campania, nazione=Italia]
08-07 12:11:50.082: D/addRegione(8078): Regione [id=0, regione=Calabria, nazione=Italia]
08-07 12:11:50.102: D/addRegione(8078): Regione [id=0, regione=Lombardia, nazione=Italia]
08-07 12:11:50.242: D/(8078): HostConnection::get() New Host Connection established 0xb829b670, tid 8078
08-07 12:11:50.322: W/EGL_emulation(8078): eglSurfaceAttrib not implemented
08-07 12:11:50.322: D/OpenGLRenderer(8078): Enabling debug mode 0

Piochè ho fatto dei copia ed incolla tra le due tabelle, non riesco a capire l'errore....