如何在ListView像'在哪里'的情况显示,从SQLite数据库特定的数据? [英] How to display specific data from a sqlite database in a listview with a condition like 'where'?
问题描述
我做了一个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屋!