Autore Topic: inserimento secondo database sql activity va in crash  (Letto 259 volte)

Offline coverbags

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    win 8.1
inserimento secondo database sql activity va in crash
« il: 07 Marzo 2015, 22:54:14 CET »
0
ciao a tutti , ho un problema con la creazione di un database sqlite

la mia app dovrebbe avere tre database , uno per ogni activity.
il primo database funziona molto bene , serve a popolare una listview
il secondo , quello di cui allego codice, dovrebbe recuperare i valori provenienti da due spinner ed una edit text



il codice e' il seguente
Codice (XML): [Seleziona]
age com.example.memopad;

import android.content.Context;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;

public class HelperB extends SQLiteOpenHelper {
        private static final String DB_NAME="_db";
        private static final int DB_VERSION=1;
        public HelperB( Context context){
                super(context,DB_NAME,null,DB_VERSION);
        }
       
 public void onCreate(SQLiteDatabase db2){
         String sql2="";
         sql2 +="CREATE TABLE  birth(";
         sql2 +=" _id INTEGER PRIMARY KEY,";
         sql2 +=" nome TEXT NOT NULL";
         sql2 +="giorno TEXT NOT NULL";
         sql2 +="mese TEXT NOT NULL";
         sql2 +=")";
         db2.execSQL(sql2);
         
 }
 public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){}
}

Codice (XML): [Seleziona]
ge com.example.memopad;

import java.util.ArrayList;
import java.util.Calendar;

import android.annotation.SuppressLint;
import android.app.DatePickerDialog.OnDateSetListener;
//import android.app.DialogFragment;
import android.app.PendingIntent;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.Fragment;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;

public class Birthday extends ActionBarActivity
{
       
        private PendingIntent pendingIntent;
        private EditText inserisciNome;
        private TextView impostaData;
        private Button BackButton2;
        private Button AggiungiData;
        private EditText inseriscigiorno;
        private EditText inseriscimese;
        private EditText inseriscianno;
        private int year;
        private int month;
        private int day;
        private Spinner spinner1, spinner2;
        private ArrayAdapter<CharSequence> adapterG ;
        ArrayAdapter<CharSequence> adapterM;
        AdapterView<?> parent;
        int pos;
        String giorno;
        private HelperB helper;
        private SQLiteDatabase dbwrite;
        private SQLiteDatabase dbleggo;
        private ArrayList<String> archivioNomi;
        private ArrayList<String> archivioGiorni;
        private ArrayList<String> archivioMesi;
        private ArrayList<Long> listaId2;
       
       
       
       
       
       
       
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.birthdaylayout);
               
                recuperaView();
                setAllListener();
                SetAdapterSpinner();
                //inizializzaDb();
               
               
                //addListenerOnButton();
               
               
               
           
            Intent alarmIntent = new Intent ( Birthday.this,AlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(Birthday.this, 0, alarmIntent, 0);
           
           
                   
           
               
       
}              
       
                public void recuperaView(){
       
                BackButton2 =(Button)findViewById(R.id.returnback2);
                AggiungiData=(Button)findViewById(R.id.aggiungiBirth2);
                inserisciNome=(EditText)findViewById(R.id.mioEditText);
                spinner1 = (Spinner) findViewById(R.id.spinnerDay);
                spinner2 = (Spinner) findViewById(R.id.spinnerMese);
               
               
               
               
               
}
                public void setAllListener(){
                       
                        AggiungiData.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                       
                                                       
                                inserisciinDB();
                               
                               
                                Toast.makeText(getApplicationContext(), inserisciNome.getText().toString() + " " + spinner1.getSelectedItem() + " "+ spinner2.getSelectedItem() ,
                                                Toast.LENGTH_SHORT).show();
                                       
                                       
                                       
                                       
                                       
                                }
                        });
                        BackButton2.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                        Intent i = new Intent ( Birthday.this,MenuActivity.class);
                                        startActivity(i);
                                       
                                }
                        });
                       
                       
                       
                       
                }      
                        private void inizializzaDb() {
                        helper = new HelperB(this);
                        dbwrite = helper.getWritableDatabase();// rendo scrivibile il db
                        dbleggo = helper.getReadableDatabase();// db diventa leggibile
                }      
                       
                        public void inserisciinDB(){
                               
                                ContentValues dati = new ContentValues();
                                dati.put("nome", inserisciNome.getText().toString());
                                dati.put("giorno",spinner1.getSelectedItem().toString());
                                dati.put("mese", spinner2.getSelectedItem().toString());
                                dbwrite.insert("birth", null, dati);
                                aggiornaElenco();
                        }
               
                        public void aggiornaElenco(){
                                final String sql2 = "SELECT * FROM birth ";
                                Cursor cursore = dbleggo.rawQuery(sql2, null);
                                archivioNomi=new ArrayList<String>();
                                archivioMesi=new ArrayList<String>();
                                archivioGiorni=new ArrayList<String>();
                                listaId2=new ArrayList<Long>();
                                while (cursore.moveToNext());
                               
                                        listaId2.add(cursore.getLong(0));
                                        archivioNomi.add(cursore.getString(1));
                                        archivioGiorni.add(cursore.getString(2));
                                        archivioMesi.add(cursore.getString(3));
                                        //System.out.println(cursore.getLong(0));
                                       
                                       
                                       
                                       
                                       
                               
                        }
               
               
                        public void SetAdapterSpinner(){
                       
                                adapterG = ArrayAdapter.createFromResource(this,
                                R.array.giorni, android.R.layout.simple_spinner_item);
                                adapterM = ArrayAdapter.createFromResource(this,
                                R.array.mesi, android.R.layout.simple_spinner_item);
                                adapterG .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                adapterM .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                spinner1.setAdapter(adapterG);
                                spinner2.setAdapter(adapterM);
                        }
               
                        public void onItemSelected(AdapterView<?> parent, View view,
                            int pos, long id) {
                               
                                       
                       
                    }

                    public void onNothingSelected(AdapterView<?> parent) {
                                            }


}

ho postato sia la classe helper che l' activity

il codice mi sembra ok ma 'applicazione , quando clicco sul bottone per aggiornare il database, mi va in crash

potete darmi una mano ?

grazie mille

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:inserimento secondo database sql activity va in crash
« Risposta #1 il: 08 Marzo 2015, 01:18:35 CET »
0
Posta un log.

Avere 3 DB non ha alcuna senso.olto meglio avere 3 tabelle in uno stesso db

Offline coverbags

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    win 8.1
Re:inserimento secondo database sql activity va in crash
« Risposta #2 il: 08 Marzo 2015, 17:57:35 CET »
0
ciao , in effetti hai ragione, per questo ho inserito una nuova tabella  ma l'applicazione va sempre in crash

il log che mi restituisce l'IDE  e' il seguente

Codice (XML): [Seleziona]
03-08 16:53:06.952: E/AndroidRuntime(1890): FATAL EXCEPTION: main
03-08 16:53:06.952: E/AndroidRuntime(1890): Process: com.example.memopad, PID: 1890
03-08 16:53:06.952: E/AndroidRuntime(1890): android.database.sqlite.SQLiteException: no such table: birth (code 1): , while compiling: SELECT * FROM birth
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at com.example.memopad.Birthday.aggiornaElenco(Birthday.java:157)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at com.example.memopad.Birthday.inserisciinDB(Birthday.java:152)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at com.example.memopad.Birthday$1.onClick(Birthday.java:113)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.view.View.performClick(View.java:4756)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.view.View$PerformClick.run(View.java:19749)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.os.Handler.handleCallback(Handler.java:739)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.os.Handler.dispatchMessage(Handler.java:95)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.os.Looper.loop(Looper.java:135)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at android.app.ActivityThread.main(ActivityThread.java:5221)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at java.lang.reflect.Method.invoke(Native Method)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at java.lang.reflect.Method.invoke(Method.java:372)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-08 16:53:06.952: E/AndroidRuntime(1890):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)


ti posto anche la classe helper
Codice (XML): [Seleziona]
package com.example.memopad;

import android.content.Context;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;

public class HelperBase extends SQLiteOpenHelper {
        private static final String DB_NAME="nome_db";
        private static final int DB_VERSION=1;
        public HelperBase( Context context){
                super(context,DB_NAME,null,DB_VERSION);
        }
       
 public void onCreate(SQLiteDatabase db){
         String sql="";
         sql +="CREATE TABLE  testo(";
         sql +=" _id INTEGER PRIMARY KEY,";
         sql +=" blabla TEXT NOT NULL";
         sql +=")";
         
         String sql2="";
         sql2 +="CREATE TABLE  birth(";
         sql2 +=" _id INTEGER PRIMARY KEY,";
         sql2 +=" nome TEXT NOT NULL";
         sql2 +=" giorno TEXT NOT NULL";
         sql2 +=" mese TEXT NOT NULL";
         sql2 +=")";
         
         db.execSQL(sql);
         db.execSQL(sql2);
 }
 
 public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){}
}
// ok ho creato la classe Helper per Database

ed il codice dell'activity "incriminata"
Codice (XML): [Seleziona]
package com.example.memopad;

import java.util.ArrayList;
import java.util.Calendar;

import android.annotation.SuppressLint;
import android.app.DatePickerDialog.OnDateSetListener;
//import android.app.DialogFragment;
import android.app.PendingIntent;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.Fragment;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;

public class Birthday extends ActionBarActivity
{
       
        private PendingIntent pendingIntent;
        private EditText inserisciNome;
        private TextView impostaData;
        private Button BackButton2;
        private Button AggiungiData;
        private EditText inseriscigiorno;
        private EditText inseriscimese;
        private EditText inseriscianno;
        private int year;
        private int month;
        private int day;
        private Spinner spinner1, spinner2;
        private ArrayAdapter<CharSequence> adapterG ;
        ArrayAdapter<CharSequence> adapterM;
        AdapterView<?> parent;
        int pos;
        String giorno;
        private HelperBase helper;
        private SQLiteDatabase db;
        private SQLiteDatabase dbRead;
        private ArrayList<String> archivioNomi;
        private ArrayList<String> archivioGiorni;
        private ArrayList<String> archivioMesi;
        private ArrayList<Long> listaId2;
       
       
       
       
       
       
       
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.birthdaylayout);
               
                recuperaView();
                setAllListener();
                SetAdapterSpinner();
                inizializzaDb();
               
               
                //addListenerOnButton();
               
               
               
           
            Intent alarmIntent = new Intent ( Birthday.this,AlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(Birthday.this, 0, alarmIntent, 0);
           
           
                   
           
               
       
}              
       
                public void recuperaView(){
       
                BackButton2 =(Button)findViewById(R.id.returnback2);
                AggiungiData=(Button)findViewById(R.id.aggiungiBirth2);
                inserisciNome=(EditText)findViewById(R.id.mioEditText);
                spinner1 = (Spinner) findViewById(R.id.spinnerDay);
                spinner2 = (Spinner) findViewById(R.id.spinnerMese);
               
               
               
               
               
}
                public void setAllListener(){
                       
                        AggiungiData.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                       
                                                       
                                inserisciinDB();
                               
                               
                                Toast.makeText(getApplicationContext(), inserisciNome.getText().toString() + " " + spinner1.getSelectedItem() + " "+ spinner2.getSelectedItem() ,
                                                Toast.LENGTH_SHORT).show();
                                       
                                       
                                       
                                       
                                       
                                }
                        });
                        BackButton2.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                        Intent i = new Intent ( Birthday.this,MenuActivity.class);
                                        startActivity(i);
                                       
                                }
                        });
                       
                       
                       
                       
                }      
                        private void inizializzaDb() {
                        helper = new HelperBase(this);
                        db = helper.getWritableDatabase();// rendo scrivibile il db
                        dbRead = helper.getReadableDatabase();// db diventa leggibile
                }      
                       
                        public void inserisciinDB(){
                               
                                ContentValues dati = new ContentValues();
                                dati.put("nome", inserisciNome.getText().toString());
                                dati.put("giorno",spinner1.getSelectedItem().toString());
                                dati.put("mese", spinner2.getSelectedItem().toString());
                                db.insert("birth", null, dati);
                                aggiornaElenco();
                        }
               
                        public void aggiornaElenco(){
                                final String sql2 = "SELECT * FROM birth ";
                                Cursor c = dbRead.rawQuery(sql2, null);
                                archivioNomi=new ArrayList<String>();
                                archivioMesi=new ArrayList<String>();
                                archivioGiorni=new ArrayList<String>();
                                listaId2=new ArrayList<Long>();
                                while (c.moveToNext());
                               
                                        listaId2.add(c.getLong(0));
                                        archivioNomi.add(c.getString(1));
                                        archivioGiorni.add(c.getString(2));
                                        archivioMesi.add(c.getString(3));
                                        System.out.println(c.getLong(0));
                                       
                                       
                                       
                                       
                                       
                               
                        }
               
               
                        public void SetAdapterSpinner(){
                       
                                adapterG = ArrayAdapter.createFromResource(this,
                                R.array.giorni, android.R.layout.simple_spinner_item);
                                adapterM = ArrayAdapter.createFromResource(this,
                                R.array.mesi, android.R.layout.simple_spinner_item);
                                adapterG .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                adapterM .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                spinner1.setAdapter(adapterG);
                                spinner2.setAdapter(adapterM);
                        }
               
                        public void onItemSelected(AdapterView<?> parent, View view,
                            int pos, long id) {
                               
                                       
                       
                    }

                    public void onNothingSelected(AdapterView<?> parent) {
                                            }

spero tu possa darmi una mano
intanto ti ringrazio

Post unito: 08 Marzo 2015, 18:53:45 CET
se ho capito bene , il problema sta proprio nella creazione della tabella birth

la prima tabella , che viene sfruttata da un'altra activity , funziona benissimo , questa seconda tabella invece , pare non venga creata.
sbaglio sicuramente qualcosa nella sintassi .

help please
« Ultima modifica: 08 Marzo 2015, 18:53:45 CET da coverbags, Reason: Merged DoublePost »