【问题标题】:how to use glob with sqlite in android如何在android中使用glob和sqlite
【发布时间】:2015-06-28 17:07:32
【问题描述】:

我有一个包含 23,000 个单词的数据库。我想让查询返回所有以某个搜索字符串开头的单词。阅读sqlite LIKE problem in android 后,我能够使用 LIKE 获得有效的查询。这里是:

SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

String [] sqlSelect = { KEY_WORD };
String sqlTables = TABLE_WORDS;
//String selection = KEY_FUZZYWORD + " =?"; // for an exact match
String selection = KEY_FUZZYWORD + " LIKE ?";
String[] selectionArgs = { searchString + "%" };
String limit = Integer.toString(WORD_QUERY_LIMIT);

qb.setTables(sqlTables);
Cursor cursor = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null, limit);

关键线是

String selection = KEY_FUZZYWORD + " LIKE ?";
String[] selectionArgs = { searchString + "%" };

但我也读过Why do we need the GLOB clause in SQLite? 区分大小写适合我的情况,所以我想我会尝试一下。如何使用带有 selectionArgs 的 SQLiteQueryBuilder 进行设置?我很难找到一个例子。 (我不想使用 rawQuery 来避免 SQL 注入。)

【问题讨论】:

    标签: android sqlite glob sql-like


    【解决方案1】:

    它与您已经拥有的非常相似。

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    
    String [] sqlSelect = { KEY_WORD };
    String sqlTables = TABLE_WORDS;
    String selection = KEY_FUZZYWORD + " GLOB ?";
    String[] selectionArgs = { searchString + "*" };
    String limit = Integer.toString(WORD_QUERY_LIMIT);
    
    qb.setTables(sqlTables);
    Cursor cursor = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null, limit);
    

    关键线是

    String selection = KEY_FUZZYWORD + " GLOB ?";
    String[] selectionArgs = { searchString + "*" };
    

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 2011-08-24
      • 2012-11-09
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多