Autore Topic: la foreign key non funziona  (Letto 265 volte)

Offline Rubin

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Experia
  • Sistema operativo:
    windows 8
la foreign key non funziona
« il: 25 Giugno 2015, 19:47:15 CEST »
0
Ciao a tutti, ho un database fatto da 2 tabelle: 1)prodotto che contiene l'id, il nome, il costo e come chiave esterna l'id dell'altra tabella; 2) la tabella spesa: id, totale.
Io inserisco da tastiera il nome e il costo dei prodotti che voglio calcolando il totale ogni volta, poi una volta finito inserisco il nome e il costo nella tabella prodotto e il totale nella tabella spesa.
Quando però estraggo il nome, il costo e l'id spesa da prodotto, la foreign key mi esce sempre 0.
Questo è il codice:

DataBaseHelper.java

Codice: [Seleziona]
public  class DataBaseHelper extends SQLiteOpenHelper {

 public static final String TAG = "DBHelper";


 // columns of the spesa table
 public static final String TABLE_SPESA = "spesa";
 public static final String SPESA_ID ="_ids";
 public static final String TOTALE = "totale";

 // columns of the prodotti table
 public static final String TABLE_PRODOTTO = "prodotto";
 public static final String PRODOTTO_ID = "_idp";
 public static final String NOME = "nome";
 public static final String PREZZO = "prezzo";
 public static final String COLUMN_SPESA_ID = "spesa_id";

 private static final String DATABASE_NAME = "datab.db";
 private static final int DATABASE_VERSION = 11;


 // SQL statement of the spesa table creation
 private static final String SQL_CREATE_TABLE_SPESA = "CREATE TABLE " + TABLE_SPESA + "("
 + SPESA_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
 + TOTALE + " INTEGER NOT NULL, "
         + COLUMN_CONTACT_ID + " INTEGER "
         +");";


 // SQL statement of the costo table creation
 private static final String SQL_CREATE_TABLE_PRODOTTO = "CREATE TABLE " + TABLE_PRODOTTO + "("
         + PRODOTTO_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
         + NOME + " TEXT NOT NULL,"
         + PREZZO + " TEXT NOT NULL, "
         + COLUMN_SPESA_ID + " INTEGER, "
         + " FOREIGN KEY (" + COLUMN_SPESA_ID + ") REFERENCES "+TABLE_SPESA+" ("+SPESA_ID+"));";


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

 @Override
 public void onCreate(SQLiteDatabase database) {
 database.execSQL(SQL_CREATE_TABLE_SPESA);
  database.execSQL(SQL_CREATE_TABLE_PRODOTTO);
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 Log.w(TAG,
         "Upgrading the database from version " + oldVersion + " to " + newVersion);
 // clear all data
 db.execSQL("DROP TABLE IF EXISTS " + TABLE_SPESA);
  db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODOTTO);

 // recreate the tables
 onCreate(db);
 }

    @Override
    public void onConfigure(SQLiteDatabase db) {
        db.setForeignKeyConstraintsEnabled(true);
    }

 public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version) {
 super(context, DATABASE_NAME, factory, DATABASE_VERSION);
 }
}


storico.java

Codice: [Seleziona]
public class Storico extends ListActivity {

    private ArrayList<String> results = new ArrayList<String>();
    private String tableName = DataBaseHelper.TABLE_PRODOTTO;
    private String tablename2= DataBaseHelper.TABLE_SPESA;
    private SQLiteDatabase newDB;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        openAndQueryDatabase();

        displayResultList();

    }
    private void displayResultList() {
        TextView tView = new TextView(this);
        tView.setText("Elenco dei prodotti comprati");
        getListView().addHeaderView(tView);

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results));
        getListView().setTextFilterEnabled(true);

    }
    private void openAndQueryDatabase() {
        try {
            DataBaseHelper dbHelper = new DataBaseHelper(this.getApplicationContext());
            newDB = dbHelper.getWritableDatabase();
            Cursor c = newDB.rawQuery("SELECT nome,prezzo,spesa_id FROM " +
                    tableName, null);

            if (c != null ) {
                if  (c.moveToFirst()) {
                    do {
                        String firstName = c.getString(c.getColumnIndex("nome"));
                        Integer costo = c.getInt(c.getColumnIndex("prezzo"));
                        //Integer id= c.getInt(c.getColumnIndex("_ids"));
                        Integer ids= c.getInt(c.getColumnIndex("spesa_id"));
                        results.add("nome: " + firstName + "costo: " + costo + "foreign: " +ids);
                    }while (c.moveToNext());
                }
            }
        } catch (SQLiteException se ) {
            Log.e(getClass().getSimpleName(), "Could not create or Open the database");
        } finally {
            newDB.close();
        }

    }

}