Ragazzi sto avendo un problema con la costruzione di un database di ricette! Di seguito vi posto le classi e il logcat perché non riesco proprio a capire per quale motivo nell'inserimento nella tabella i values sono tutti "?Grazie a tutti!
Classe principale con un esempio di inserimento dentro il database!
codice:
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class AndroidSQLiteActivity extends Activity {
/** Called when the activity is first created. */
TextView nome;
TextView piatto;
TextView cottura;
TextView numeroP;
TextView ingredienti;
TextView preparazione;
TextView ricettaDi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
piatto=(TextView)findViewById(R.id.tipoPiatto);
nome=(TextView)findViewById(R.id.nome);
cottura=(TextView)findViewById(R.id.tempoCottura);
numeroP=(TextView)findViewById(R.id.nPersone);
ingredienti=(TextView)findViewById(R.id.ingredienti);
preparazione=(TextView)findViewById(R.id.preparazione);
ricettaDi=(TextView)findViewById(R.id.ricettaDi);
DatabaseHandler db = new DatabaseHandler(this);
/**
* CRUD Operations
* */
//ricette(String nome,String tipoPiatto,int tempoCottura,int numeroP, String ingredienti,String quantita,String preparazione,String ricettaDi,String difficolta)
// Inserting Contacts
Log.d("Insert: ", "Inserting ..");
ricette ricetta= new ricette("A","B",10,4,"C","D","E","F","G");
db.addRicetta((ricetta));
// Reading all contacts
Log.d("Reading: ", "Reading all recipes..");
List<ricette> r = db.getAllRicette();
for (ricette cn : r) {
String log = "Id: "+cn.getID()+" ,Name: " + cn.getNome() + " ,Fatta da: " + cn.getcreatoreRicetta();
nome.setText(ricetta.getNome());
piatto.setText(ricetta.getTipoPiatto());
cottura.setText(ricetta.getCottura());
numeroP.setText(ricetta.getnumeroP());
ingredienti.setText(ricetta.getIngredienti());
preparazione.setText(ricetta.getPreparazione());
// Writing Contacts to log
//Log.d("Name: ", log);
}
}
}
Gestore del database con creazione della tabella
codice:
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "lap2.db";
// Contacts table name
private static final String TABLE_ricette = "ricette";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "nome";
private static final String KEY_tipo_Piatto = "tipoPiatto";
private static final String KEY_tempoCottura="tempoCottura";
private static final String KEY_numeroP="numeroP";
private static final String KEY_ingredienti="ingredienti";
private static final String KEY_quantita="quantita";
private static final String KEY_preparazione="preparazione";
private static final String KEY_ricettaDi="Creatore_Ricetta";
private static final String KEY_difficolta="difficolta";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_ricette_TABLE = "CREATE TABLE " + TABLE_ricette + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_tipo_Piatto + " TEXT,"+ KEY_tempoCottura+" INTEGER,"+KEY_numeroP+" INTEGER,"+
KEY_ingredienti+" TEXT,"+KEY_quantita+" TEXT,"+KEY_preparazione+" TEXT,"+KEY_ricettaDi+" TEXT,"+KEY_difficolta+" TEXT"+ ");";
db.execSQL(CREATE_ricette_TABLE);
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ricette);
// Create tables again
onCreate(db);
}
/**
* All CRUD(Create, Read, Update, Delete) Operations
*/
// Adding new ricetta
//ricette(String nome,String tipoPiatto,int tempoCottura,int numeroP, String ingredienti,String quantita,String preparazione,String ricettaDi,String difficolta)
void addRicetta(ricette r) {
SQLiteDatabase db = this.getWritableDatabase();
System.out.println("r.getNome()"+r.getNome());
System.out.println("r.getTipoPiatto()"+r.getTipoPiatto());
System.out.println("r.getCottura()"+r.getCottura());
System.out.println("r.getNumeroP()"+r.getnumeroP());
System.out.println("r.getIngredienti()"+r.getIngredienti());
System.out.println("r.getQuantita()"+r.getQuantita());
System.out.println("r.getPreparazione()"+r.getPreparazione());
System.out.println("r.getCreatoreRicetta()"+r.getcreatoreRicetta());
System.out.println("r.getDifficolta()"+r.getDifficolta());
ContentValues values = new ContentValues();
values.put(KEY_NAME, r.getNome());
values.put(KEY_tipo_Piatto, r.getTipoPiatto());
values.put(KEY_tempoCottura, r.getCottura());
values.put(KEY_numeroP, r.getnumeroP());
values.put(KEY_ingredienti, r.getIngredienti());
values.put(KEY_quantita, r.getQuantita());
values.put(KEY_preparazione, r.getPreparazione());
values.put(KEY_ricettaDi,r.getcreatoreRicetta());
values.put(KEY_difficolta, r.getDifficolta());
// Inserting Row
db.insert(TABLE_ricette, null, values);
db.close(); // Closing database connection
System.out.println("ho chiuso il collegamento con il database!");
}
// Getting single ricetta
ricette getRicette(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_ricette, new String[] { KEY_ID,
KEY_NAME, KEY_tipo_Piatto,KEY_tempoCottura,KEY_numeroP,
KEY_ingredienti,KEY_quantita,KEY_preparazione,KEY_ricettaDi,
KEY_difficolta }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
//int _ID, String nome,String tipoPiatto,int tempoCottura,int nnumeroP, String ingredienti,String quantita,String preparazione,String ricettaDi,String difficolta
ricette r = new ricette(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2),Integer.parseInt(cursor.getString(3)),Integer.parseInt(cursor.getString(4)),
cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8),cursor.getString(9));
// return ricette
return r;
}
// Getting All ricette
public List<ricette> getAllRicette() {
List<ricette> ricetteList = new ArrayList<ricette>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_ricette;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
ricette r= new ricette();
r.setID(Integer.parseInt(cursor.getString(0)));
r.setNome(cursor.getString(1));
r.setTipoPiatto(cursor.getString(2));
r.setCottura(Integer.parseInt(cursor.getString(3)));
r.setnumeroP(Integer.parseInt(cursor.getString(4)));
r.setIngredienti(cursor.getString(5));
r.setQuantita(cursor.getString(6));
r.setPreparazione(cursor.getString(7));
r.setcreatoreRicetta(cursor.getString(8));
r.setDifficolta(cursor.getString(9));
// Adding ricetta to list
ricetteList.add(r);
} while (cursor.moveToNext());
}
return ricetteList;
}
// Updating ricetta singola
public int updateContact(ricette r) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, r.getNome());
values.put(KEY_tipo_Piatto, r.getTipoPiatto());
values.put(KEY_tempoCottura, r.getCottura());
values.put(KEY_numeroP, r.getnumeroP());
values.put(KEY_ingredienti, r.getIngredienti());
values.put(KEY_quantita, r.getQuantita());
values.put(KEY_preparazione, r.getPreparazione());
values.put(KEY_ricettaDi,r.getcreatoreRicetta());
values.put(KEY_difficolta, r.getDifficolta());
// updating row
return db.update(TABLE_ricette, values, KEY_ID + " = ?",
new String[] { String.valueOf(r.getID()) });
}
// Deleting ricetta
public void deleteRicetta(ricette r) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_ricette, KEY_ID + " = ?",
new String[] { String.valueOf(r.getID()) });
db.close();
}
// Getting ricette Count
public int getRicetteCount() {
String countQuery = "SELECT * FROM " + TABLE_ricette;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
}
Classe ricette con tutti i metodi get e set per le singole ricette la trovate QUI
Errore logcat
codice:
E/Database(15649):android.database.sqlite.SQLiteException:table ricette has no column named numeroP:, while compiling: INSERT INTO ricette(numeroP,tipoPiatto,tempoCottura,nome,preparazione,quantita,difficolta,Creatore_Ricetta) VALUES(?,?,?,?,?,?,?,?,?);
Domandona...ma perchè inserisce in modo così disordinato??Quando creo la tabella e gli passo i valori, l'ordine è sempre String nome,String tipoPiatto,int cottura,int numeroP, String ingredienti,String quantita,String preparazione,String creatoreRicetta,String difficolta dove numeroP sarebbe il numero di persone!!Grazie a tutti per l'aiuto