Autore Topic: Inserimento dati in una tabella di un database  (Letto 323 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Inserimento dati in una tabella di un database
« il: 21 Novembre 2014, 15:54:39 CET »
0
Salve a tutti!

Ho appena iniziato a sperimentare il database per android MySQLlite ed ho guardato vari tutorial sull'argomento e mi sono "incastrato" sull'inserimento dei dati in una tabella.

La mia applicazione ha 6 tabella e per inserire che ho creato in questo modo:
Codice (Java): [Seleziona]
SQLiteDatabase db;
int DB_VERSION=1;//Versione del database

 if(db==null|| !db.isOpen()){

            //Creo il database Turismo e la relativa tabella se non esistono
            db=openOrCreateDatabase("Turismo", Context.MODE_PRIVATE, null);
            db.execSQL("CREATE TABLE IF NOT EXISTS ristorante(name VARCHAR,descrizione VARCHAR);");
            db.execSQL("CREATE TABLE IF NOT EXISTS evento(name VARCHAR,descrizione VARCHAR);");
            db.execSQL("CREATE TABLE IF NOT EXISTS cultura(name VARCHAR,descrizione VARCHAR);");
            db.execSQL("CREATE TABLE IF NOT EXISTS divertimento(name VARCHAR,descrizione VARCHAR);");
            db.execSQL("CREATE TABLE IF NOT EXISTS albergo(name VARCHAR,descrizione VARCHAR);");
            db.execSQL("CREATE TABLE IF NOT EXISTS prodotto(name VARCHAR,descrizione VARCHAR);");

            int OldVersion=db.getVersion();
            if(OldVersion!= DB_VERSION){
                inserimento("Osteria_della_stazione_di_Felino","Descrizione");
            }


        }

la funzione "inserimento è così strutturata:
Codice (Java): [Seleziona]
public void inserimento(ContentValues Nome,String Descrizione){
        //inserisce un dato nella tabella
        db.execSQL("INSERT INTO ristorante VALUES('"+Nome+",'"+Descrizione+"');");
       // db.insert("ristorante","name",Nome);
    }

ora.... alcuni tutorial dicono di usare execSQL per inserire i dati , ma in quel caso il logcat mi da questo errore:

Codice: [Seleziona]
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.adorni.turisticapp/com.example.adorni.turisticapp.MyActivity}: android.database.sqlite.SQLiteException: near "Descrizione": syntax error (code 1): , while compiling: INSERT INTO ristorante VALUES('Osteria_della_stazione_di_Felino,'Descrizione');
invece se uso "insert" non mi trovo col terzo parametro che dovrebbe essere un "ContentValues"

suggerimenti?

finisco col dire che sono quasi negato con l'SQL quindi potrei aver fatto qualche errore idiota

grazie mille in anticipo!!

Post unito: 21 Novembre 2014, 16:37:31 CET
ok sono riuscito a risolverlo, avevo sbagliato il codice SQL come era prevedibile
posto quello corretto:
Codice (XML): [Seleziona]
 db.execSQL("INSERT INTO ristorante('name','descrizione') VALUES" +
                        "('Osteria_della_stazione_di_Felino','Descrizione');");

ora però mi trovo alle prese con la selezione di alcuni dati dalla tabella:
Codice (Java): [Seleziona]
db=openOrCreateDatabase("Turismo", Context.MODE_PRIVATE, null);

        String Nome=getPackageName();

        //cerca un record nella tabella
        Cursor c=db.rawQuery("SELECT name FROM ristorante WHERE Nome='"+Nome+"'", null);
        if(c.moveToFirst())
        {
            Descrizione.setText(c.getString(1));

        }

e il logcat da questo errore:

Codice: [Seleziona]
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.adorni.turisticapp/com.example.adorni.turisticapp.Ristorante}: android.database.sqlite.SQLiteException: no such column: Nome (code 1): , while compiling: SELECT name FROM ristorante WHERE Nome='com.example.adorni.turisticapp'
e questo di errore proprio non lo capisco... perché la variabile nome corrisponde a "com.example.adorni.turisticapp" ?

questo è l'intent che uso per passare il nome alla classe java:
Codice (Java): [Seleziona]
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                // ListView Clicked item index
                int itemPosition     = position;

                // ListView Clicked item value
                String  itemValue    = (String) listView.getItemAtPosition(position);

                // Show Alert
                Toast.makeText(getApplicationContext(),
                        "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
                        .show();

                Intent SingleRistoranti = new Intent(Ristoranti.this,Ristorante.class);
                SingleRistoranti.putExtra("Nome",itemValue);
                startActivity(SingleRistoranti);



            }
        });

l'intent non è corretto?

grazie mille ancora per l'aiuto
« Ultima modifica: 21 Novembre 2014, 16:37:31 CET da ValerioAdo, Reason: Merged DoublePost »

Offline Cleon I

  • Nuovo arrivato
  • *
  • Post: 49
  • Sono l'imperatore della galassia
  • Respect: +2
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG L70, Nexus 7 2013
  • Sistema operativo:
    LinuxMint Cinnamon 17.1
Re:Inserimento dati in una tabella di un database
« Risposta #1 il: 03 Dicembre 2014, 11:16:16 CET »
0
secondo me qui:

Codice (Java): [Seleziona]
Cursor c=db.rawQuery("SELECT name FROM ristorante WHERE Nome='"+Nome+"'", null);
manca un ricco ; alla fine della query

cmq ci sono metodi più puliti per gestire i db leggi questo tutorial il codice alla fine esce più leggibile: http://www.anddev.it/index.php/topic,856.0.html

anche nell'intent c'è qialcosa che non mi convince

Ristoranti.this secondo me non è corretto un semplice this dovrebbe bastare
« Ultima modifica: 03 Dicembre 2014, 11:21:09 CET da Cleon I »