Autore Topic: Problema Database SLQite  (Letto 518 volte)

Offline Macca

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s4 mini
  • Sistema operativo:
    Windows 8
Problema Database SLQite
« il: 04 Ottobre 2014, 19:46:25 CEST »
0
Codice (Java): [Seleziona]
 [/code]Salve sto riscontrando un problema che mi blocca totalmente, vi faccio vedere le classi, per ora il progetto non fa granchè dovrebbe semplicemente inserire una riga di valori nel database, pèrò mi da problemi, ecco le classi:



public class DatabaseHelper extends SQLiteOpenHelper
{
   private static final String NOME_DATABASE = "elenco.db";
   private static final int VERSIONE_DATABASE = 1;
   private static final String CREATORE_DATABASE = "create table oggetti (_id primary key autoincrement, nome text not null, prezzo integer not null, data text, ora text, quantita integer, posizione text);";
   
   public DatabaseHelper(Context ctx)
   {
      super(ctx, NOME_DATABASE, null, VERSIONE_DATABASE);
   }

   @Override
   public void onCreate(SQLiteDatabase db)
   {
      db.execSQL(CREATORE_DATABASE);
   }

   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
   {
      db.execSQL("DROP TABLE IF EXIST oggetti");
      onCreate(db);
   }
}





public class DbAdapter
{
   private static final String LOG_TAG = DbAdapter.class.getSimpleName();
   private Context ctx;
   private SQLiteDatabase database;
   private DatabaseHelper dbHelper;
   
   private static final String NOME_TABELLA = "oggetti";
   private static final String ID = "id";
   private static final String NOME_OGGETTO = "nome";
   private static final String PREZZO = "prezzo";
   private static final String DATA = "data";
   private static final String ORA = "ora";
   private static final String QUANTITA = "quantita";
   private static final String POSIZIONE = "posizione";
   
   public DbAdapter (Context ctx)
   {
      this.ctx=ctx;
   }
   
   public DbAdapter open() throws SQLException
   {
      dbHelper = new DatabaseHelper(ctx);
      database = dbHelper.getWritableDatabase();
      return this;
   }
   public void close()
   {
      dbHelper.close();
   }
   
   public ContentValues createContentValues(String name, int prezzo, String data, String ora, int quantita, String posizione)
   {
      ContentValues values = new ContentValues();
      values.put(NOME_OGGETTO, name);
      values.put(PREZZO, prezzo);
       values.put(DATA, data);
       values.put(ORA, ora);
       values.put(QUANTITA, quantita);
       values.put(POSIZIONE, posizione);
       return values;
   }
   public long createContact(String nome, int prezzo, String data, String ora, int quantita, String posizione)
   {
      ContentValues initialValues = createContentValues(nome, prezzo, data, ora, quantita, posizione);
      return database.insertOrThrow(NOME_TABELLA, null, initialValues);
   }
   
   public boolean updateContact(int contactID, String name, int prezzo, String data, String ora, int quantita, String posizione)
   {
      ContentValues updateValues = createContentValues(name, prezzo , data , ora, quantita, posizione);
      return database.update(NOME_TABELLA, updateValues, ID + "=" + contactID, null) > 0;
   }
   public boolean deleteContact(long contactID)
   {
       return database.delete(NOME_TABELLA, ID + "=" + contactID, null) > 0;
   }
   
   public Cursor fetchContactsByFilter(String filter)
   {
      Cursor mCursor = database.query(true, NOME_TABELLA, new String[] {
                                       ID, NOME_OGGETTO, PREZZO, DATA, ORA, QUANTITA, POSIZIONE },
                                       NOME_OGGETTO + " like '%"+ filter + "%'", null, null, null, null, null);
      return mCursor;
   }
   
   
   public Cursor fetchAllContacts()
   {
      return database.query(NOME_TABELLA, null , null, null, null, null, null);
   }
}










public class MainActivity extends Activity
{
    private DbAdapter dbHelper;
    private Cursor cursor;
    private SQLiteDatabase database;
   


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        dbHelper = new DbAdapter(this);       
        dbHelper.open();
        cursor = dbHelper.fetchAllContacts();
        ContentValues cv;
        long key;
        cv = dbHelper.createContentValues("oggetto", 22, "01/08", "22 30", 15, "boh");
        key = database.insertOrThrow("oggetti", null, cv);                <<<< la riga che mi da effettivamente problemi senza quella non si blocca
        startManagingCursor(cursor);
        cursor.close();
        dbHelper.close();
    }
}
Codice (Java): [Seleziona]
[code=xml][/code]
« Ultima modifica: 07 Ottobre 2014, 10:41:01 CEST da Macca »

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Problema Database SLQite
« Risposta #1 il: 05 Ottobre 2014, 00:22:49 CEST »
0
Che problemi ti da? Va in Crash? Errore di sintassi?
Posta il LogCat, perfavore :)
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline Macca

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s4 mini
  • Sistema operativo:
    Windows 8
Re:Problema Database SLQite
« Risposta #2 il: 05 Ottobre 2014, 13:11:49 CEST »
0
scusa, è che sono abbastanza nuovo e non so esattamente cosa postare con logcat, cmq mi crasha non da errori.

Offline Macca

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s4 mini
  • Sistema operativo:
    Windows 8
Re:Problema Database SLQite
« Risposta #3 il: 06 Ottobre 2014, 18:57:47 CEST »
0
Sono disperato, ho letto il tutorial sul logCat, me lo sono scaricato, però su eclipse non mi mostra i logcat che invio, anche se creo filtri non mi da niente...

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema Database SLQite
« Risposta #4 il: 07 Ottobre 2014, 10:04:32 CEST »
0
Sono disperato, ho letto il tutorial sul logCat, me lo sono scaricato, però su eclipse non mi mostra i logcat che invio, anche se creo filtri non mi da niente...

Ciao,
Se hai letto il tutorial (che dice di pubblicare il logcat) e mi dici che non ti mostra i tuoi logcat ma non posti niente, mi non hai seguito il discorso...

Fai due cose:
ingloba il codice che hai postato nel tag java (c'è l'iconcina classica della tazza sotto al selettore della dimensione del carattere quando posti), cosi da rendere leggibile il tuo post.
Poi riguarda il logcat al momento dell'errore, identifica la parte che viene scritta (SEMPRE) quando l'app crasha e copiala qui (se filtri per type error, non può in alcun modo non comparire), la racchiudi dal tag generico code (tasto #) e solo dopo qualcuno ti può aiutare, altrimenti il codice buttato li serve a poco!  ;-)

Aspettiamo tuoi aggiornamenti
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Macca

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s4 mini
  • Sistema operativo:
    Windows 8
Re:Problema Database SLQite
« Risposta #5 il: 07 Ottobre 2014, 11:02:21 CEST »
0
si, scusa il problema era che avevo lasciato aperto per troppo tempo eclipse e non mi faceva più vedere i logcat, gli errori però me li da su all message, non sui filtri del progetto in sè, su quello mi da solo info e un warning, cosa faccio posto tutti gli errori senza filtrarli per progetto?
Cmq il messaggio che mi da é:
"this kind of launch is configured to open the debug prospective when it suspends."

Post unito: 07 Ottobre 2014, 11:57:18 CEST
cmq questo è il log che contiene gli "all message"
« Ultima modifica: 07 Ottobre 2014, 11:57:18 CEST da Macca, Reason: Merged DoublePost »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema Database SLQite
« Risposta #6 il: 07 Ottobre 2014, 14:55:18 CEST »
0
mmm il logcat cosi con all message è illeggibile, a occhio non c'è il log dell'errore che dici (l'hai preso in momenti diversi?).
Dovresti creare un filtro con package quello della tua app, dopo la lanci, e salvi il log
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Macca

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s4 mini
  • Sistema operativo:
    Windows 8
Re:Problema Database SLQite
« Risposta #7 il: 07 Ottobre 2014, 15:39:01 CEST »
0
mmm il logcat cosi con all message è illeggibile, a occhio non c'è il log dell'errore che dici (l'hai preso in momenti diversi?).
Dovresti creare un filtro con package quello della tua app, dopo la lanci, e salvi il log
quello me lo crea in automatico, il problema è che non mi da errori li, solo warning tutto ciò mi sta confondendo alquanto...

Post unito: 08 Ottobre 2014, 00:33:25 CEST
Codice (Java): [Seleziona]
Ragazzi ve ne posto un'altro che mi da un altro problema, però qui il logcat funziona, ecco:

[code]

public class DBAdapter
{

        private static final String TAG = "DBAdapter";
       
        public static final String KEY_ROWID = "_id";
        public static final int COL_ROWID = 0;

        public static final String NOME_OGGETTO = "nome";
        public static final String PREZZO = "prezzo";
        public static final String DATA = "data";
        public static final String ORA = "ora";
        public static final String QUANTITA = "quantita";
        public static final String POSIZIONE = "posizione";

       
        public static final int COL_NAME = 1;
        public static final int COL_PREZZO = 2;
        public static final int COL_DATA = 3;
        public static final int COL_ORA = 4;
        public static final int COL_QUANTITA = 5;
        public static final int COL_POSIZIONE = 6;

        public static final String[] ALL_KEYS = new String[] {KEY_ROWID, NOME_OGGETTO, PREZZO, DATA, ORA, QUANTITA, POSIZIONE};
       
        public static final String DATABASE_NAME = "MyDb";
        public static final String DATABASE_TABLE = "mainTable";
        public static final int DATABASE_VERSION = 2;
       
        private static final String DATABASE_CREATE_SQL =
                        "create table " + DATABASE_TABLE
                        + " (" + KEY_ROWID + " integer primary key autoincrement, "
                        + NOME_OGGETTO + "text not null, "
                        + PREZZO + "integer not null, "
                        + DATA + "text not null, "
                        + ORA + "text not null, "
                        + QUANTITA + "integer not null, "
                        + POSIZIONE + "text not null "
                        + ");";
       
        private final Context context;
       
        private DatabaseHelper myDBHelper;
        private SQLiteDatabase db;


        public DBAdapter(Context ctx)
        {
                this.context = ctx;
                myDBHelper = new DatabaseHelper(context);
        }
       
        public DBAdapter open()
        {
                db = myDBHelper.getWritableDatabase();
                return this;
        }
       
        public void close()
        {
                myDBHelper.close();
        }
       
        public long insertRow(String nome, int prezzo, String data, String ora, int quantita, String posizione)
        {

                ContentValues initialValues = new ContentValues();
                initialValues.put(NOME_OGGETTO, nome);
                initialValues.put(PREZZO, prezzo);
                initialValues.put(DATA, data);
                initialValues.put(ORA, ora);
                initialValues.put(QUANTITA, quantita);
                initialValues.put(POSIZIONE, posizione);
               
                return db.insert(DATABASE_TABLE, null, initialValues);
        }
       
        public boolean deleteRow(long rowId)
        {
                String where = KEY_ROWID + "=" + rowId;
                return db.delete(DATABASE_TABLE, where, null) != 0;
        }
       
        public void deleteAll()
        {
                Cursor c = getAllRows();
                long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
                if (c.moveToFirst())
                {
                        do
                        {
                                deleteRow(c.getLong((int) rowId));                             
                        }
                        while (c.moveToNext());
                }
                c.close();
        }
       
        public Cursor getAllRows()
        {
                String where = null;
                Cursor c =      db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
                if (c != null)
                {
                        c.moveToFirst();
                }
                return c;
        }

        public Cursor getRow(long rowId)
        {
                String where = KEY_ROWID + "=" + rowId;
                Cursor c =      db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
                if (c != null)
                {
                        c.moveToFirst();
                }
                return c;
        }
       
        public boolean updateRow(long rowId, String nome, int prezzo, String data, String ora, int quantita, String posizione)
        {
                String where = KEY_ROWID + "=" + rowId;

                ContentValues newValues = new ContentValues();
                newValues.put(NOME_OGGETTO, nome);
                newValues.put(PREZZO, prezzo);
                newValues.put(DATA, data);
                newValues.put(ORA, ora);
                newValues.put(QUANTITA, quantita);
                newValues.put(POSIZIONE, posizione);
               
                return db.update(DATABASE_TABLE, newValues, where, null) != 0;
        }
       
       

        private static class DatabaseHelper extends SQLiteOpenHelper
        {
                DatabaseHelper(Context context)
                {
                        super(context, DATABASE_NAME, null, DATABASE_VERSION);
                }

                @Override
                public void onCreate(SQLiteDatabase _db)
                {
                        _db.execSQL(DATABASE_CREATE_SQL);                      
                }

                @Override
                public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion)
                {
                        Log.w(TAG, "Upgrading application'
s database from version " + oldVersion
                                        + "
to " + newVersion + ", which will destroy all old data!");
                       
                        _db.execSQL("
DROP TABLE IF EXISTS " + DATABASE_TABLE);
                       
                        onCreate(_db);
                }
        }
}







public class MainActivity extends Activity
{
       
        DBAdapter myDb;
       
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                openDB();
        }
        @Override
        protected void onDestroy()
        {
                super.onDestroy();     
                closeDB();
        }


        private void openDB()
        {
                myDb = new DBAdapter(this);
                myDb.open();
        }
        private void closeDB()
        {
                myDb.close();
        }

       
       
        private void displayText(String message)
        {
        TextView textView = (TextView) findViewById(R.id.textDisplay);
        textView.setText(message);
        }
       
       

        public void onClick_AddRecord(View v)
        {
                displayText("
Clicked add record!");
               
                long newId = myDb.insertRow("
Jenny", 5559, "Green", "ciao", 22, "funziona");
               
                Cursor cursor = myDb.getRow(newId);
                displayRecordSet(cursor);
        }

        public void onClick_ClearAll(View v)
        {
                displayText("
Clicked clear all!");
                myDb.deleteAll();
        }

        public void onClick_DisplayRecords(View v)
        {
                displayText("
Clicked display record!");
               
                Cursor cursor = myDb.getAllRows();
                displayRecordSet(cursor);
        }
       
        private void displayRecordSet(Cursor cursor)
        {
                String message = "
";
               
                if (cursor.moveToFirst())
                {
                        do
                        {
                                int id = cursor.getInt(DBAdapter.COL_ROWID);
                                String nome = cursor.getString(DBAdapter.COL_NAME);
                                int prezzo = cursor.getInt(DBAdapter.COL_PREZZO);
                                String data = cursor.getString(DBAdapter.COL_DATA);
                                String ora = cursor.getString(DBAdapter.COL_ORA);
                                int quantita = cursor.getInt(DBAdapter.COL_QUANTITA);
                                String posizione = cursor.getString(DBAdapter.COL_POSIZIONE);
                               
                                message += "
id=" + id
                                                   +"
, nome = " + nome
                                                   +"
, prezzo = " + prezzo
                                                   +"
, data = " + data
                                                   +"
, ora = " + ora
                                                   +"
, quantita = " + quantita
                                                   +"
, posizione = " + posizione
                                                   +"
\n";
                        }
                        while(cursor.moveToNext());
                }              
                cursor.close();
                displayText(message);
        }
}

e il Logcat è:
10-08 00:01:42.534: E/SQLiteLog(32641): (1) no such column: nome


Questi database mi stanno facendo impazzire, non riesco a trovarne uno e ad adattarlo per farlo funzionare alla mia causa aiutatemi :( :( :(
[/code]
« Ultima modifica: 08 Ottobre 2014, 00:33:25 CEST da Macca, Reason: Merged DoublePost »