android - 如何在 android 中使用 glob 和 sqlite

标签 android sqlite glob sql-like

我有一个包含 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 注入(inject)。)

最佳答案

它与您已有的非常相似。

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 + "*" };

进一步阅读:

关于android - 如何在 android 中使用 glob 和 sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773891/

相关文章:

android - Robot Pepper 无法在 Real Pepper 上运行 Android 应用程序

android - 防止媒体播放器同时播放多个声音

php - 从 MySQL 迁移到数据库的本地单文件实现(闪存和 AS3)的更轻松的方法

php - glob 函数中的 RegEx 模式

android - 加速启动一个简单的android Activity

android - CameraX 配置不正确。最可能的原因是您没有在构建中包含默认实现,例如“camera-camera2”

java - SQLiteOpenHelper 类中的调用 Activity

java - 数据不会插入并显示在我的应用程序上 |安卓工作室

python - 如何使用glob.glob合并txt文件并添加字符串来分解txt?

bash - 迭代可变路径中的文件 (Bash)