JavascriptProva

sabato 23 gennaio 2016

Ripasso del LIKE nella query di selezione di un database.

Bene.
Adesso l'esercizio consiste nel caricare immagini su una GridView ordinabile per categorie.

Per prima cosa creo un database con una tabella Categorie, la quale ha due campi, Categoria e Path.
Questa tabella è collegata con una AutoComplete.
Ho problemi a ricordare con certezza la sintassi della query con il LIKE.
Apro un sottoprogramma di ripasso...

Questo è il codice della query che ho scritto:
  public Cursor query(String str){
   SQLiteDatabase db=this.getWritableDatabase();
   Cursor crs=db.rawQuery("select * from TblCategorie where categoria like '" +str+"%'", null);
   return crs;
  }
e che devo verificare per essere sicuro che sia scritto bene.
Dunque mi predispongo una ListView in cui scaricare e visualizzare tutti i record del database.
Ecco: ho inserito due records in cui i valori del campo "categoria" erano "cazzate" e "minchiate", e constato che il funzionamento è quello che mi aspettavo:
codice completo:
public class MainActivity extends Activity {
 
 private ListView listView;
 private Helper helper;
 private Adapter adapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  setContentView(R.layout.activity_main);
  
  helper=new Helper(this);
  listView=(ListView)findViewById(R.id.listView1);
  helper.save("cazzate","unCertoPath");
  helper.save("minchiate","unCertoPath");
  adapter=new Adapter(this,helper.query("m"));
  listView.setAdapter(adapter);
  
 }
 
 class Adapter extends CursorAdapter{

  public Adapter(Context context, Cursor c) {
   super(context, c);
   
  }

  @Override
  public View newView(Context context, Cursor cursor, ViewGroup parent) {
   LayoutInflater inflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
   View v=inflater.inflate(R.layout.hills, null);
   return v;
  }

  @Override
  public void bindView(View view, Context context, Cursor cursor) {
   TextView testo=(TextView)view.findViewById(R.id.textView1);
   testo.setText(cursor.getString(1));
   
  }
  
 }
 
 class Helper extends SQLiteOpenHelper{

  public Helper(Context context) {
   super(context, "mioDatabase", null, 1);
   // TODO Auto-generated constructor stub
  }

  public void save(String categoria,String path){
   SQLiteDatabase db=this.getWritableDatabase();
   ContentValues values=new ContentValues();
   values.put("categoria",categoria);
   db.insert("TblCategorie", null, values);
  }
  
  public Cursor query(String str){
   SQLiteDatabase db=this.getWritableDatabase();
   Cursor crs=db.rawQuery("select * from TblCategorie where categoria like '" +str+"%'", null);
   return crs;
  }
  @Override
  public void onCreate(SQLiteDatabase db) {
   db.execSQL("create table tblCategorie(_id integer primary key, categoria text,path text)");
   
   
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // TODO Auto-generated method stub
   
  }
  
 }
Se la parte marcata in rosso ha come parametro una lettera (in questo caso la "m") appaiono solo i records in cui "categoria" inizia per "m", se la "c" solo quelli in cui "categoria" inizia per "c", se si tratta di una stringa vuota appaiono tutti i records, se è uno spazio " " non appare nessun record.
Ottimo ripasso!

Nessun commento:

Posta un commento