Autore Topic: query di lettura  (Letto 581 volte)

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
query di lettura
« il: 25 Agosto 2014, 18:10:57 CEST »
0
ho realizzato un database con una tabella di molte colonne che riesco ad interrogare e modificare in maniera compiuta.
vorrei però recuperare il dato di un record in una colonna e visualizzarlo semplicemente nella EditText di una activity.
Grazie a chi vorrà aiutarmi

PS. la query che non restituisce nulla è

 public Cursor leggodato()
    {                                       
        SQLiteDatabase db = helper.getReadableDatabase();
        String dato = "SELECT * FROM anagrafica WHERE PRZ LIMIT 1 OFFSET 0";
        Cursor crs = db.rawQuery(dato, null);
        while (crs.moveToNext()) ;
        {
        }
        return crs;
    }

questa mi restituisce i dati ma con extends ListActivity

public Cursor getAnagrafica() {
        SQLiteDatabase db = helper.getReadableDatabase();   
        Cursor crs = db.query("anagrafica", null, null, null, null, null, null);
        return crs;
    }
« Ultima modifica: 25 Agosto 2014, 18:17:53 CEST da gaetano cristilli »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:query di lettura
« Risposta #1 il: 25 Agosto 2014, 18:46:45 CEST »
0
Devi estrarre i dati dal cursor. Se ad esempio la seconda colonna è una stringa:

Codice (Java): [Seleziona]
String s = crs.getString(2);
PS: formatta il codice con il tastino "java", così migliora la leggibilità.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #2 il: 26 Agosto 2014, 08:21:15 CEST »
0
Grazie per la risposta immediata
Ti terrò aggiornato

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #3 il: 27 Agosto 2014, 11:28:03 CEST »
0
purtroppo non riesco a visualizzare il dato nella EditText della activity
ora mi da errore "Caused by: android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1"
vorrei cortesemente maggiori suggerimenti in quanto ancora poco, ma molto poco, esperto.
grazie.
PS
nella activity dove vorrei visualizzare il dato faccio così:

setContentView(R.layout.calcolopm);
        adapter = new CursorAdapter(this,db.leggodato(), false)

        {
            @Override
            public View newView(Context context, Cursor cursor, ViewGroup viewGroup)
            {
                View v = LayoutInflater.from(context).inflate(R.layout.calcolopm, null);
                return v;
            }
            @Override
            public void bindView(View view, Context context, Cursor cursor) cursore
            {
                EditText txt = (EditText) view.findViewById(R.id.txt_PRZb1);     
                txt.setText(cursor.getString(cursor.getColumnIndex("PRZ")));
            }
        };

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:query di lettura
« Risposta #4 il: 27 Agosto 2014, 12:04:00 CEST »
+1
Per chiarezza creati una classe "gestionale" del tuo db dove dentro scrivi i metodi che pensi di usare.

per esempio le 15 riche usate per ricavare un nome le scrivi in una classe DbOpenHelper (dove c'è anche la parte relativa a creazione del db).

Cosi nella tua activity richiami solo il metodo "String nome =  getNameFromNumber("3693693257");

Quel errore viene generato perchè accedi ad una colonna inesistente, o ad una riga inesistente

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #5 il: 27 Agosto 2014, 12:35:51 CEST »
0
se ho ben capito ecco la classe "gestionale" con i metodi per interrogare il DB.
per la query del singolo dato uso " public Cursor leggodato()" l'ultima query in elenco e in "String s = crs.getString(12);" 12 sarebbe la dodicesima colonna compresa la colonna Key autoincrement

public class DbAdapter
{
    private DbHelper helper = null;

    private static final String anagrafica_TABLE = "anagrafica";
    public static final String Key_id = "id";
    public static final String Key_via = "via";
    public static final String Key_numero = "numero";
    public static final String Key_comune = "comune";
    public static final String Key_venditore = "venditore";
    public static final String Key_acquirente = "acquirente";
    public static final String Key_notaio = "notaio";
    public static final String Key_data = "data";
    public static final String Key_foglio = "foglio";
    public static final String Key_particella = "particella";
    public static final String Key_sub = "sub";
    public static final String Key_PRZ = "PRZ";
    public static final String Key_DAT = "DAT";
    public static final String Key_SUP = "SUP";
    public static final String Key_BAL = "BAL";
    public static final String Key_IMP = "IMP";
    public static final String Key_SER = "SER";
    public static final String Key_STM = "STM";
    public static final String Key_LIV = "LIV";
    public static final String Key_BOX = "BOX";
    public static final String Key_CAN = "CAN";
    public static final String Key_CEN = "CEN";
    public static final String Key_PAN = "PAN";

    public DbAdapter(Context context)
    {
        helper = new DbHelper(context);
    }

    public void newAnagrafica(ContentValues values)       
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.insert("anagrafica", null, values);
    }

    public void newIndici(ContentValues values) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.insert("indici", null, values);
    }

    public Cursor getAnagrafica() {
        SQLiteDatabase db = helper.getReadableDatabase();    //20-21-22 Query di lettura mediante classe Cursor dei record di una tabella
        Cursor crs = db.query("anagrafica", null, null, null, null, null, null);
        return crs;
    }

    public Cursor getIndici() {
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor crs = db.query("indici", null, null, null, null, null, null);
        return crs;
    }

    public void updateAnagrafica(ContentValues values, String via) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.update("anagrafica", values, "via=?", new String[]{via});
    }

    public void deleteAnagrafica(String via) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.delete("anagrafica", "via=?", new String[]{via});
    }

    public void updateIndici(ContentValues values, String iDAT) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.update("indici", values, "iDAT=?", new String[]{iDAT});
    }

    public void deleteIndici(String iDAT) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.delete("indici", "iDAT=?", new String[]{iDAT});
    }

    public Cursor leggodato()
    {                                        //query per leggere un singolo dato di tabella
        SQLiteDatabase db = helper.getReadableDatabase();
        String dato = "SELECT * FROM anagrafica WHERE PRZ LIMIT 1 OFFSET 0";
        Cursor crs = db.rawQuery(dato, null);
        while (crs.moveToNext()) ;

        {
            String s = crs.getString(12);
        }
        return crs;
    }

}

credo che il problema sia nella activity che deve rappresentare il dato

 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calcolopm);

        adapter = new CursorAdapter(this,db.leggodato(), false)

        {
            @Override
            public View newView(Context context, Cursor cursor, ViewGroup viewGroup)
            {
                View v = LayoutInflater.from(context).inflate(R.layout.calcolopm, null);
                return v;
            }

            @Override
            public void bindView(View view, Context context, Cursor cursor) //22 collega la vista creata da newView con i dati del cursore
            {
                EditText txt = (EditText) view.findViewById(R.id.txt_PRZb1);      // con il metodo getReadableDatabase
                txt.setText(cursor.getString(cursor.getColumnIndex("PRZ")));
            }
        };

faccio bene ad usare newView e bindView ?
grazie ancora
Codice (Java): [Seleziona]
 

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:query di lettura
« Risposta #6 il: 27 Agosto 2014, 13:19:01 CEST »
0
Edita e metti il tag java

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #7 il: 27 Agosto 2014, 13:44:17 CEST »
0
se ho ben capito ecco la classe "gestionale" con i metodi per interrogare il DB.
per la query del singolo dato uso " public Cursor leggodato()" l'ultima query in elenco e in "String s = crs.getString(12);" 12 sarebbe la dodicesima colonna compresa la colonna Key autoincrement
Codice (Java): [Seleziona]
public class DbAdapter
{
    private DbHelper helper = null;

    private static final String anagrafica_TABLE = "anagrafica";
    public static final String Key_id = "id";
    public static final String Key_via = "via";
    public static final String Key_numero = "numero";
    public static final String Key_comune = "comune";
    public static final String Key_venditore = "venditore";
    public static final String Key_acquirente = "acquirente";
    public static final String Key_notaio = "notaio";
    public static final String Key_data = "data";
    public static final String Key_foglio = "foglio";
    public static final String Key_particella = "particella";
    public static final String Key_sub = "sub";
    public static final String Key_PRZ = "PRZ";
    public static final String Key_DAT = "DAT";
    public static final String Key_SUP = "SUP";
    public static final String Key_BAL = "BAL";
    public static final String Key_IMP = "IMP";
    public static final String Key_SER = "SER";
    public static final String Key_STM = "STM";
    public static final String Key_LIV = "LIV";
    public static final String Key_BOX = "BOX";
    public static final String Key_CAN = "CAN";
    public static final String Key_CEN = "CEN";
    public static final String Key_PAN = "PAN";

    public DbAdapter(Context context)
    {
        helper = new DbHelper(context);
    }

    public void newAnagrafica(ContentValues values)      
    {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.insert("anagrafica", null, values);
    }

    public void newIndici(ContentValues values) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.insert("indici", null, values);
    }

    public Cursor getAnagrafica() {
        SQLiteDatabase db = helper.getReadableDatabase();    //20-21-22 Query di lettura mediante classe Cursor dei record di una tabella
        Cursor crs = db.query("anagrafica", null, null, null, null, null, null);
        return crs;
    }

    public Cursor getIndici() {
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor crs = db.query("indici", null, null, null, null, null, null);
        return crs;
    }

    public void updateAnagrafica(ContentValues values, String via) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.update("anagrafica", values, "via=?", new String[]{via});
    }

    public void deleteAnagrafica(String via) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.delete("anagrafica", "via=?", new String[]{via});
    }

    public void updateIndici(ContentValues values, String iDAT) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.update("indici", values, "iDAT=?", new String[]{iDAT});
    }

    public void deleteIndici(String iDAT) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.delete("indici", "iDAT=?", new String[]{iDAT});
    }

    public Cursor leggodato()
    {                                        //query per leggere un singolo dato di tabella
        SQLiteDatabase db = helper.getReadableDatabase();
        String dato = "SELECT * FROM anagrafica WHERE PRZ LIMIT 1 OFFSET 0";
        Cursor crs = db.rawQuery(dato, null);
        while (crs.moveToNext()) ;

        {
            String s = crs.getString(12);
        }
        return crs;
    }

}

credo che il problema sia nella activity che deve rappresentare il dato
Codice (Java): [Seleziona]
@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calcolopm);

        adapter = new CursorAdapter(this,db.leggodato(), false)

        {
            @Override
            public View newView(Context context, Cursor cursor, ViewGroup viewGroup)
            {
                View v = LayoutInflater.from(context).inflate(R.layout.calcolopm, null);
                return v;
            }

            @Override
            public void bindView(View view, Context context, Cursor cursor) //22 collega la vista creata da newView con i dati del cursore
            {
                EditText txt = (EditText) view.findViewById(R.id.txt_PRZb1);      // con il metodo getReadableDatabase
                txt.setText(cursor.getString(cursor.getColumnIndex("PRZ")));
            }
        };

faccio bene ad usare newView e bindView ?
grazie ancora

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #8 il: 28 Agosto 2014, 12:54:49 CEST »
0
Chiedo scusa se non ho messo subito il Tag ai codici, non avevo capito la procedura.

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #9 il: 31 Agosto 2014, 18:35:56 CEST »
0
Nessuno mi aiuta?

Offline gaetano_c

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    Windows 7
Re:query di lettura
« Risposta #10 il: 01 Settembre 2014, 18:48:16 CEST »
0
 :-(