Autore Topic: Primo avvio e creazione del database  (Letto 922 volte)

Offline tascabile

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Primo avvio e creazione del database
« il: 18 Ottobre 2012, 17:25:00 CEST »
0
salve, sto cercando di implementare i Database nella mia app.
premetto che ho creato la classe con i vari metodi, ma mi blocca una cosa, in fase di test mi dice sempre che non riesce a trovare il database quando eseguo

Codice (Java): [Seleziona]
DB_method databaseHelper = new DB_method(this);
SQLiteDatabase database = databaseHelper.getWritableDatabase();

Giustamente queste due istruzioni servono per aprire il DB creato in precedenza, il fatto è che io non l'ho ancora creato, come fare??? Quale istruzione usare??

Grazie mille
Tascabile

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Primo avvio e creazione del database
« Risposta #1 il: 18 Ottobre 2012, 21:49:29 CEST »
0
Ti consiglio questa lettura: Storage Options | Android Developers

Sopratutto il codice dei due esempio Note Pad e Searchable Dictionary.

Offline tascabile

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Primo avvio e creazione del database
« Risposta #2 il: 19 Ottobre 2012, 12:17:40 CEST »
0
allora posto la mia classe DB_method
Codice (Java): [Seleziona]
package tascabile.applicazione.birra;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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



public class DB_method extends SQLiteOpenHelper {
       
        public final static String DB_NAME = "Apllicazione_birra.db";
        private final static  int DATABASE_VERSION = 1;
       
        public DB_method(Context context) {
                super(context, DB_NAME, null, DATABASE_VERSION);
        }
       
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                db.execSQL("DROP TABLE " + Birre.TABLE_NAME);
                db.execSQL("CREATE TABLE " + Birre.TABLE_NAME + " ("
                + Birre.ID + " INTEGER PRIMARY KEY,"
                + Birre.NOME + " TEXT,"
                + Birre.NAZIONE + " TEXT"
                + Birre.GRADAZIONE + " DOUBLE"
                + Birre.TIPO + " TEXT"
                + Birre.TEMPERATURA + " TEXT"
                + Birre.DESCRIZIONE + " TEXT"
                + ");"
                );
                load(db, new InputStreamReader(this.getClass().getResourceAsStream("birre.csv")));
        }
       
       
       
        @Override
        public void onCreate(SQLiteDatabase db) {
                db.create(null);
                db.execSQL("CREATE TABLE " + Birre.TABLE_NAME + " ("
                                 + Birre.ID + " INTEGER PRIMARY KEY,"
                     + Birre.NOME + " TEXT,"
                     + Birre.NAZIONE + " TEXT,"
                     + Birre.GRADAZIONE + " TEXT,"
                     + Birre.TIPO + " TEXT,"
                     + Birre.TEMPERATURA + " TEXT,"
                     + Birre.DESCRIZIONE + " TEXT"
                + ");");
                load(db, new InputStreamReader(this.getClass().getResourceAsStream("birre.csv")));
        }
       
        private void load(SQLiteDatabase db, InputStreamReader in) {
                BufferedReader reader = new BufferedReader(in);
                try {
                        String line = null;
                        while ( (line = reader.readLine()) != null ) {
                                db.insert(Birre.TABLE_NAME, null, Birre.getContentValues(line));
                                System.err.println("sto caricando un record");
                        }
                        reader.close();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (in != null) {
                                try {
                                        in.close();
                                } catch (IOException e) {
                                }
                        }
                }
        }

}


mentre questo è l'inizio dell'activity principale

Codice (Java): [Seleziona]
public class Home_page extends Activity {

        private Button bottone_birre;                                                                                                                                           //creo l'oggetto bottone nel codice    
        private Button bottone_diario;                                                                                                                                          //creo l'oggetto bottone nel codice
        Intent intent;                                                                                                                                                                          //creo l'oggetto intent per il passaggio ad una nuova activity 
        TextView tv;
        String string ="1";
       
        private final static String MY_PREFERENCES = "versione";                                                                                        // Identificatore delle preferenze dell'applicazione
        private final static String TEXT_DATA_KEY = "textData";                                                                                         // Costante relativa al nome della particolare preferenza
               
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_page);
       
       
        DB_method database = new DB_method(getApplicationContext());                                                                            //creo l'helper per aprire il DB
        SQLiteDatabase database2 = database.getWritableDatabase();                                                                              //apro il DB sia in lettura che in scrittura


e questo invece il Logcat

Codice: [Seleziona]
10-19 10:13:47.767: I/Process(463): Sending signal. PID: 463 SIG: 9
10-19 10:14:15.488: I/Database(513): sqlite returned: error code = 1, msg = near "BIRRE": syntax error
10-19 10:14:15.488: E/Database(513): Failure 1 (near "BIRRE": syntax error) on 0x2a48d8 when preparing 'CREATE TABLE LISTA BIRRE (_id INTEGER PRIMARY KEY,NOME TEXT,NAZIONE TEXT,GRADAZIONE TEXT,TIPO TEXT,TEMPERATURA TEXT,DESCRIZIONE TEXT);'.
10-19 10:14:15.498: D/AndroidRuntime(513): Shutting down VM
10-19 10:14:15.498: W/dalvikvm(513): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-19 10:14:15.518: E/AndroidRuntime(513): FATAL EXCEPTION: main
10-19 10:14:15.518: E/AndroidRuntime(513): java.lang.RuntimeException: Unable to start activity ComponentInfo{tascabile.applicazione.birra/tascabile.applicazione.birra.Home_page}: android.database.sqlite.SQLiteException: near "BIRRE": syntax error: CREATE TABLE LISTA BIRRE (_id INTEGER PRIMARY KEY,NOME TEXT,NAZIONE TEXT,GRADAZIONE TEXT,TIPO TEXT,TEMPERATURA TEXT,DESCRIZIONE TEXT);
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.os.Looper.loop(Looper.java:123)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.ActivityThread.main(ActivityThread.java:3683)
10-19 10:14:15.518: E/AndroidRuntime(513):         at java.lang.reflect.Method.invokeNative(Native Method)
10-19 10:14:15.518: E/AndroidRuntime(513):         at java.lang.reflect.Method.invoke(Method.java:507)
10-19 10:14:15.518: E/AndroidRuntime(513):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-19 10:14:15.518: E/AndroidRuntime(513):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-19 10:14:15.518: E/AndroidRuntime(513):         at dalvik.system.NativeStart.main(Native Method)
10-19 10:14:15.518: E/AndroidRuntime(513): Caused by: android.database.sqlite.SQLiteException: near "BIRRE": syntax error: CREATE TABLE LISTA BIRRE (_id INTEGER PRIMARY KEY,NOME TEXT,NAZIONE TEXT,GRADAZIONE TEXT,TIPO TEXT,TEMPERATURA TEXT,DESCRIZIONE TEXT);
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
10-19 10:14:15.518: E/AndroidRuntime(513):         at tascabile.applicazione.birra.DB_method.onCreate(DB_method.java:42)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
10-19 10:14:15.518: E/AndroidRuntime(513):         at tascabile.applicazione.birra.Home_page.onCreate(Home_page.java:40)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-19 10:14:15.518: E/AndroidRuntime(513):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-19 10:14:15.518: E/AndroidRuntime(513):         ... 11 more

mi viene da pensare che ci sia qualcosa che non va nel metodo onCreate.
A voi la parola.
Grazie ancora

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Primo avvio e creazione del database
« Risposta #3 il: 19 Ottobre 2012, 12:27:29 CEST »
+2
Codice (Java): [Seleziona]
10-19 10:14:15.488: E/Database(513): Failure 1 (near "BIRRE": syntax error) on 0x2a48d8 when preparing 'CREATE TABLE LISTA BIRRE (_id INTEGER PRIMARY KEY,NOME TEXT,NAZIONE TEXT,GRADAZIONE TEXT,TIPO TEXT,TEMPERATURA TEXT,DESCRIZIONE TEXT);'.
L'errore è abbastanza chiaro, il nome di una tabella non può contenere spazi, mentre tu voi chiamarla "LISTA BIRRE".
Verifica tutte le costanti TABLE_NAME nei tuoi bean e correggili di conseguenza (magari mettendoci un '_' al posto degli spazi.
Già che ci sei verifica anche i nomi delle colonne, che anche loro non devono contenere spazi.

Offline tascabile

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Primo avvio e creazione del database
« Risposta #4 il: 19 Ottobre 2012, 13:03:58 CEST »
0
Grazie mille, errore risolto, 4 anni fa non avrei commesso questo stupido errore, ora sto riprendendo dopo una lunga pausa...grazie mille ancora :)

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Primo avvio e creazione del database
« Risposta #5 il: 19 Ottobre 2012, 13:09:24 CEST »
0
Che brutta cosa la vecchiaia!  :-P