2013-02-10 122 views
-3

我有一个数据库表的多个列如何创建过滤器

我使用自定义列表<>和数据库
填充它就是我想要做的是过滤器根据用户究竟会进入名单的数据库输入

例如,如果我有这样的一个表:

name|phone|date|address 

用户可以指定任何过滤器(姓名,电话,按日期...或全部的话),只有项目匹配所有标准将会消失列入清单

有没有办法做到这一点?

方法,返回从数据库

public List<MoviesDatabaseEntry> getAllMovies(String table) 
{ 
    List<MoviesDatabaseEntry> lists = new ArrayList<MoviesDatabaseEntry>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + table; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) 
    { 
     do { 
      MoviesDatabaseEntry list = new MoviesDatabaseEntry(); 
      list.set_id(Integer.parseInt(cursor.getString(0))); 
      list.set_title(cursor.getString(1)); 
      list.set_runtime(cursor.getString(2)); 
      list.set_rating(cursor.getDouble(3)); 
      list.set_genres(cursor.getString(4)); 
      list.set_type(cursor.getString(5)); 
      list.set_lang(cursor.getString(6)); 
      list.set_poster(cursor.getString(7)); 
      list.set_url(cursor.getString(8)); 
      list.set_director(cursor.getString(9)); 
      list.set_actors(cursor.getString(10)); 
      list.set_plot(cursor.getString(11)); 
      list.set_year(cursor.getInt(12)); 
      list.set_country(cursor.getString(13)); 
      list.set_date(cursor.getInt(14)); 


      // Adding to list 
      lists.add(list); 
     } while (cursor.moveToNext()); 
    } 

    // return list 
    db.close(); 
    cursor.close(); 
    return lists; 
} 
+0

当然,但你的问题是缺乏重要的细节。你使用的数据库是什么,你的数据库查询代码看起来如何? – Philipp 2013-02-10 12:43:03

+0

在android中的sqlite,你是什么意思数据库查询。我有一个从数据库中检索项目的方法。你是这个意思吗? – pedja 2013-02-10 12:45:57

+0

当你使用sqlite的时候,你肯定有一个SQL查询(“SELECT * FROM table;”)。还是你使用一些框架来访问数据库?请将访问数据库的代码添加到您的问题中。 – Philipp 2013-02-10 12:47:16

回答

2

的所有项目,您可以过滤你要构建该行的SQL查询得到的条目:

String selectQuery = "SELECT * FROM " + table; 

要过滤检索数据集,你会添加一个WHERE子句。当你将,例如,只希望那些条目,其中评级是超过300,你会改变这:

String selectQuery = "SELECT * FROM " + table + " WHERE rating > 3"; 

SQL是一个非常强大的语言,它提供了很多可能性。当您使用关系数据库时,这是一项基本技能。如果你想了解它,我可以推荐你的互动教程网站http://sqlzoo.net/

+0

好吧,多个过滤器呢? – pedja 2013-02-10 12:56:48

+1

你只需要添加在where子句...其中列1> 1和列2 =“somestring” ... – Sajmon 2013-02-10 12:58:22

+0

好的,谢谢..... – pedja 2013-02-10 13:01:10

0

你必须改变你的数据库查询,从查询得到具体的数据。

你有一个函数,返回的所有行的数据库,像这样:getAllMovies(String table)

这里使用的是:

String selectQuery = "SELECT * FROM " + table; 

作出这样一个新功能:

public List<MoviesDatabaseEntry> getSelectedMovies(String table) 
{ 
    List<MoviesDatabaseEntry> lists = new ArrayList<MoviesDatabaseEntry>(); 

    Cursor cursor = db.query(true, TABLE_NAME, new String[] { <your row names> }, 
       **check condition(as string)**, null, 
       null, null, null, null); 
    ... 
} 

现在只需在需要时使用您的特定查询字符串调用此功能

尽可能多的功能!