0

I made an application with an SQLite database. I want to show the data in a listview, but I don't want to show all the data from the database, but just some data. So, I want to add a condition. I only want to show the data where string 'dag' is 'maandag'. Can anyone help me?

This is the code from my DatabaseHelper, where the database is created:

package com.persoonlijk.rooster.test2;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import java.util.ArrayList;
import java.util.List;

//A helper class to manage database creation and version management. 
public class DataManipulator
{
//Database attributes
private static final String DATABASE_NAME = "mydatabase.db";
static final String TABLE_NAME = null;
private static final int DATABASE_VERSION = 12;

//Table attributes
public static final String KEY_ROWID = "id";
public static final String KEY_DAG = "dag";
public static final String KEY_UUR = "uur";
public static final String KEY_VAK = "vak";
public static final String KEY_LOKAAL = "lokaal";

private static Context context;
static SQLiteDatabase db;

private SQLiteStatement insertStmt;
private static final String INSERT = "insert into " + TABLE_NAME + " (dag,uur,vak,lokaal) values (?,?,?,?)";
public DataManipulator(Context context) {
DataManipulator.context = context;
OpenHelper openHelper = new OpenHelper(DataManipulator.context);
DataManipulator.db = openHelper.getWritableDatabase();
this.insertStmt = DataManipulator.db.compileStatement(INSERT);
}

public long insert(String dag,String uur,String vak,String lokaal) {
this.insertStmt.bindString(1, dag);
this.insertStmt.bindString(2, uur);
this.insertStmt.bindString(3, vak);
this.insertStmt.bindString(4, lokaal);
return this.insertStmt.executeInsert();
}

public void deleteAll() {
db.delete(TABLE_NAME, null, null);
}

public List<String[]> selectAll()
{
List<String[]> list = new ArrayList<String[]>();
Cursor cursor = db.query(TABLE_NAME, new String[] { "id","dag","uur","vak","lokaal" }, null, null, null, null, "dag asc");
int x=0;
if (cursor.moveToFirst()) {
   do {
    String[] b1=new String[]{cursor.getString(0),cursor.getString(1),cursor.getString(2),
cursor.getString(3),cursor.getString(4)};
    list.add(b1);
    x=x+1;
   } while (cursor.moveToNext());
 }
if (cursor != null && !cursor.isClosed()) {
   cursor.close();
}
cursor.close();
return list;
}

public boolean delete(long id) {
    return db.delete(TABLE_NAME, KEY_ROWID + "=" + id, null) > 0;
        }

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


@Override
public void onCreate(SQLiteDatabase db) {
     db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY, dag TEXT, uur TEXT, vak TEXT, lokaal TEXT)");
}

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

}

This is the code from the Activity where I want to display the specific data. Right now, all the data from the database is displayed.

package com.persoonlijk.rooster.test2;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class RoosterMaandag extends ListActivity{   

  TextView selection;
  public int idToModify;
  DataManipulator dm;

  List<String[]> list = new ArrayList<String[]>();
  List<String[]> names2 =null ;
  String[] stg1;

  /** Called when the activity is first created. */
  //zorgt voor het overzicht van de gegevens uit de database
  @Override
  public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.rooster);

    dm = new DataManipulator(this);
    names2 = dm.selectAll();

    stg1=new String[names2.size()];
    int x=0;
    String stg;

    for (String[] dag : names2) {
    stg = dag[1]+" - "+dag[2]+ " - "+dag[3]+" - "+dag[4];
    stg1[x]=stg;
    x++;
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,stg1);
    this.setListAdapter(adapter);
    selection=(TextView)findViewById(R.id.selection);

}  

 //menuknoppen
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
   menu.add(Menu.NONE, 0, 0, "Voeg gegevens toe");
   menu.add(Menu.NONE, 1, 1, "Verwijder gegevens");
   return super.onCreateOptionsMenu(menu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case 0:
           startActivity(new Intent(this, SaveData.class));
       return true;
       case 1:
           startActivity(new Intent(this, VerwijderData.class));
       return true;

   }
   return false;
  }

 }

Please let me know when my question isn't clear enough. I really hope someone can help me!

I added this code in my DataManipulator.java:

    public List<String[]> selectSome(String arg) {
    String[] columns = new String[] { "id", "dag", "uur", "vak", "lokaal" };
    String[] selectionArgs = {arg};
    Cursor cursor = db.query(TABLE_NAME, columns, "dag = ?", selectionArgs, null, null, "dag asc");

    List<String[]> list = new ArrayList<String[]>(cursor.getCount());
    while (cursor.moveToNext()) {
        String[] b1 = new String[] { cursor.getString(0),
                cursor.getString(1), cursor.getString(2),
                cursor.getString(3), cursor.getString(4) };
        list.add(b1);
    }
    cursor.close();
    return list;
}

and this code in my RoosterMaandag.java:

 public void onCreate(Bundle savedInstanceState){
 ....
 dm.selectSome("maandag");
 ....
 }
4

2 に答える 2

0

Androidについてはわかりませんが、SQLについては

これを試して

select data_to_print from table_name where REGEXP_LIKE(column_name_where_to_match,'dag$');

詳細はこちらhttp://docs.oracle.com/cd/B12037_01/server.101/b10759/ap_posix001.htm#i690819

例:

SQL> select job_id from jobs where regexp_like(job_id,'N$');

JOB_ID
----------
MK_MAN
PU_MAN
SA_MAN
ST_MAN
于 2013-01-03T15:20:28.543 に答える
0

DataManipulatorクラスに新しいメソッドが必要です。

public List<String[]> selectSome(String arg) {
    String[] columns = new String[] { "id", "dag", "uur", "vak", "lokaal" };
    String[] selectionArgs = {arg};
    Cursor cursor = db.query(TABLE_NAME, columns, "dag = ?", selectionArgs, null, null, "dag asc");

    List<String[]> list = new ArrayList<String[]>(cursor.getCount());
    while (cursor.moveToNext()) {
        String[] b1 = new String[] { cursor.getString(0),
                cursor.getString(1), cursor.getString(2),
                cursor.getString(3), cursor.getString(4) };
        list.add(b1);
    }
    cursor.close();
    return list;
}

もう一度言います。CursorAdapterこれらのタスクには を使用することを検討してください。

于 2013-01-03T15:43:50.343 に答える