2012-01-31 106 views
25

我在我的NAMES表中有3个名字,Allakhazam,Beatbox和Cunning。类似Android的SQLite数据库查询

public Cursor fetchNamesByConstraint(String filter) { 

    mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, KEY_NAME + " LIKE ?", 
      new String[] { filter }, null, null, null, 
      null); 

    return mCursor; 
} 

我称之为有“A”的功能作为过滤器,但我的光标返回一个0计数时,它至少应该回到我1.任何人都可以看到什么是错的代码?

回答

75

如果您使用通配符,则此语句将返回keyname等于字符串所指定字符串的所有记录,那么您可以获得期望的结果。如:

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, KEY_NAME + " LIKE ?", 
      new String[] { filter+"%" }, null, null, null, 
      null); 

将列出以过滤器中的单词开始的所有记录。

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, KEY_NAME + " LIKE ?", 
      new String[] {"%"+ filter+ "%" }, null, null, null, 
      null); 

将列出所有包含过滤词的记录。

+0

谢谢,这并对我来说,我看着错误的地方。 – Maurice 2012-01-31 09:04:17

+0

这可以帮助我很多,谢谢。 – 2013-06-21 10:54:47

+0

为什么我们需要在上面的代码中为过滤器添加%符号? @jeet – 2015-03-04 05:37:14

2

你应该给使用通配符过滤器;)

"A%" 
+0

android.database.sqlite.SQLiteException:near“%”:语法错误:编译时:SELECT DISTINCT _id,nid,name FROM names WHERE name LIKE%?%当我添加“LIKE?%”时得到此错误 – Maurice 2012-01-31 08:49:29

+0

您需要用单引号包装你的字符串 – rsaxvc 2013-04-10 15:44:33

3
public java.util.Vector<Products> getsearch(String subcategory,String searchby) 
    { 
     SQLiteDatabase db=this.getReadableDatabase(); 

     Cursor cursor = db.query(
      TABLE_PRODUCTS, 
      new String[] { SUBCATEGORY, MAIN_CATEGORY, PRODUCT_ID, PRODUCT_NAME, BRAND, PACKAGE_SIZE, PRICE }, 
      SUBCATEGORY + " LIKE '%" + subcategory + "%'", 
      null, null, null, null, null); 
    } 
4

你可以试试这个.....代码.......

public static final String KEY_ROWID="row"; 
public static final String KEY_NAME="name"; 

public Cursor fetchNamesByConstraint(String filter) { 

    Cursor cursor=mDb.query(true, DATABASE_NAMES_TABLE, null,"row LIKE '%"+filter+"%' or name LIKE '%"+filter+"%'",null, null, null, null); 

    } 
+2

没有参数绑定代码变得不安全与SQL注入漏洞 – Alfishe 2014-12-29 02:57:24

+0

对不起,我不明白。 – 2014-12-31 07:48:28

+2

我只是通过filter =“criteria%'; DROP DATABASE .....; SELECT * FROM table WHERE row LIKE'%criteria” – Alfishe 2014-12-31 23:36:43