如何在ListView像'在哪里'的情况显示,从SQLite数据库特定的数据? [英] How to display specific data from a sqlite database in a listview with a condition like 'where'?

查看:154
本文介绍了如何在ListView像'在哪里'的情况显示,从SQLite数据库特定的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个SQLite数据库的应用程序。我要显示在列表视图中的数据,但我不希望显示数据库中的所有数据,但只是一些数据。所以,我想补充一个条件。我只想显示其中字符串DAG是maandag的数据。
谁能帮我?

这是从我的DatabaseHelper,其中创建数据库的code:

 包com.persoonlijk.rooster.test2;进口android.content.Context;
进口android.database.Cursor;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;
进口android.database.sqlite.SQLiteStatement;
进口的java.util.ArrayList;
进口的java.util.List;//一个辅助类来管理数据库的建立和版本管理。
公共类DataManipulator
{
//数据库属性
私有静态最后弦乐DATABASE_NAME =mydatabase.db;
静态最后弦乐TABLE_NAME = NULL;
私有静态最终诠释DATABASE_VERSION = 12;//属性表
公共静态最后弦乐KEY_ROWID =ID;
公共静态最后弦乐KEY_DAG =DAG;
公共静态最后弦乐KEY_UUR =UUR;
公共静态最后弦乐KEY_VAK =VAK;
公共静态最后弦乐KEY_LOKAAL =lokaal;私有静态上下文的背景下;
静态SQLiteDatabase分贝;私人SQLiteStatement的insertstmt;
私有静态最后弦乐INSERT =插入+ TABLE_NAME +(DAG,UUR,VAK,lokaal)值(,,,????);
公共DataManipulator(上下文的背景下){
DataManipulator.context =背景;
OpenHelper openHelper =新OpenHelper(DataManipulator.context);
DataManipulator.db = openHelper.getWritableDatabase();
this.insertStmt = DataManipulator.db.compileStatement(INSERT);
}众长插入(DAG字符串,字符串UUR,VAK字符串,字符串lokaal){
this.insertStmt.bindString(1,DAG);
this.insertStmt.bindString(2,UUR);
this.insertStmt.bindString(3,VAK);
this.insertStmt.bindString(4,lokaal);
返回this.insertStmt.executeInsert();
}公共无效deleteAll(){
db.delete(TABLE_NAME,NULL,NULL);
}公开名单<的String []>全选()
{
清单<的String []>名单=新的ArrayList<的String []>();
光标光标= db.query(TABLE_NAME,新的String [] {ID,DAG,UUR,VAK,lokaal},NULL,NULL,NULL,NULL,DAG ASC);
INT X = 0;
如果(cursor.moveToFirst()){
   做{
    的String [] = B1新的String [] {cursor.getString(0),cursor.getString(1),cursor.getString(2)
cursor.getString(3),cursor.getString(4)};
    list.add(B1);
    X = X + 1;
   }而(cursor.moveToNext());
 }
如果(光标=空&放大器;!&放大器;!cursor.isClosed()){
   cursor.close();
}
cursor.close();
返回列表;
}公共布尔删除(长ID){
    返回db.delete(TABLE_NAME,KEY_ROWID +=+ ID,NULL)> 0;
        } 私有静态类OpenHelper扩展SQLiteOpenHelper {
 OpenHelper(上下文的背景下){
     超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
     db.execSQL(CREATE TABLE+ TABLE_NAME +(ID INTEGER PRIMARY KEY,天TEXT,TEXT UUR,VAK TEXT,lokaal TEXT));
}@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页)
    {
     db.execSQL(DROP TABLE IF EXISTS+ TABLE_NAME);
     的onCreate(DB);
}
}}

这是从那里我想显示具体的数据活动的code。现在,将显示所有从数据库中的数据。

 包com.persoonlijk.rooster.test2;进口的java.util.ArrayList;
进口的java.util.List;进口android.app.ListActivity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.ContextMenu;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.ArrayAdapter;
进口android.widget.ListView;
进口android.widget.TextView;公共类RoosterMaandag扩展ListActivity {  TextView的选择;
  公众诠释idToModify;
  DataManipulator DM;  清单<的String []>名单=新的ArrayList<的String []>();
  清单<的String []> names2 = NULL;
  的String [] STG1;  / **当第一次创建活动调用。 * /
  // zorgt VOOR概述简单描述范·德·gegevens UIT德数据库
  @覆盖
  公共无效的onCreate(捆绑savedInstanceState){    super.onCreate(savedInstanceState);
    的setContentView(R.layout.rooster);    DM =新DataManipulator(本);
    names2 = dm.selectAll();    STG1 =新的String [names2.size()];
    INT X = 0;
    串英镑;    对于(字符串[] DAG:names2){
    英镑= DAG [1] + - + DAG [2] + - + DAG [3] + - + DAG [4];
    STG1 [X] =英镑;
    X ++;
    }    ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,STG1);
    this.setListAdapter(适配器);
    选择=(的TextView)findViewById(R.id.selection);} // menuknoppen
 @覆盖
 公共布尔onCreateOptionsMenu(菜单菜单){
   menu.add(Menu.NONE,0,0,Voeg gegevens趾);
   menu.add(Menu.NONE,1,1,Verwijder gegevens);
   返回super.onCreateOptionsMenu(菜单);
 } @覆盖
 公共布尔onOptionsItemSelected(菜单项项){
    开关(item.getItemId()){
       情况下0:
           startActivity(新意图(这一点,SaveData.class));
       返回true;
       情况1:
           startActivity(新意图(这一点,VerwijderData.class));
       返回true;   }
   返回false;
  } }

请让我知道什么时候我的问题不够清楚。我真的希望有人能帮助我!

我在DataManipulator.java添加了这个$​​ C $ C:

 公开名单<的String []> selectSome(字符串ARG){
    的String [] =列新的String [] {ID,DAG,UUR,VAK,lokaal};
    的String [] = selectionArgs两个{arg}里;
    光标光标= db.query(TABLE_NAME,列DAG =?,selectionArgs两个,NULL,NULL,DAG ASC);    清单<的String []>名单=新的ArrayList<的String []>(cursor.getCount());
    而(cursor.moveToNext()){
        的String [] = B1新的String [] {cursor.getString(0)
                cursor.getString(1),cursor.getString(2),
                cursor.getString(3),cursor.getString(4)};
        list.add(B1);
    }
    cursor.close();
    返回列表;
}

这code在我RoosterMaandag.java:

 公共无效的onCreate(捆绑savedInstanceState){
 ....
 dm.selectSome(maandag);
 ....
 }


解决方案

您需要在您的 DataManipulator 类的新方法:

 公开名单<的String []> selectSome(字符串ARG){
    的String [] =列新的String [] {ID,DAG,UUR,VAK,lokaal};
    的String [] = selectionArgs两个{arg}里;
    光标光标= db.query(TABLE_NAME,列DAG =?,selectionArgs两个,NULL,NULL,DAG ASC);    清单<的String []>名单=新的ArrayList<的String []>(cursor.getCount());
    而(cursor.moveToNext()){
        的String [] = B1新的String [] {cursor.getString(0)
                cursor.getString(1),cursor.getString(2),
                cursor.getString(3),cursor.getString(4)};
        list.add(B1);
    }
    cursor.close();
    返回列表;
}

我再说一遍。考虑使用的CursorAdapter 这些任务。

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");
 ....
 }

解决方案

you need a new method in your DataManipulator class:

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;
}

I'll say it again. consider using a CursorAdapter for these tasks.

这篇关于如何在ListView像'在哪里'的情况显示,从SQLite数据库特定的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆