Интересно, как связать SQLite FTS параметры запроса для очистки ввода. Я пытался запустить необработанный запрос, как показано ниже, который закончился ошибкой времени выполнения.
Когда я создал таблицу. Он отлично работал с,
private const val SQL_CREATE_ENTRIES =
"CREATE VIRTUAL TABLE entry USING FTS4 (title, subtitle);"
db.execSQL(SQL_CREATE_ENTRIES)
Некоторые записи успешно вставляются в БД с помощью
val values = ContentValues().apply {
put("title", "Test title")
put("subtitle", "Test subtitle")
}
val newRowId = db?.insert("entry", null, values)
Теперь я запускаю необработанный запрос, например,
val query = "SELECT * FROM entry WHERE title MATCH '?'"
val args = arrayOf("Test")
val cursor: Cursor? = db.rawQuery(query, args)
Это не удается с ошибкой времени выполнения,
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.achellies.kotlin/com.achellies.kotlin.MainActivity}: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3229)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.
at android.database.sqlite.SQLiteProgram.bind(SQLiteProgram.java:240)
at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:194)
В случае базы данных non FTS мы можем запросить с привязкой =?. Итак, как я могу очистить запрос FTS4 SQLite, в котором есть предложение MATCH?
@forpas ты имел в виду ‘ПОИСКПОЗ = ?’? нет я так не пробовал
Да, это то, что я имею в виду. Попробуйте: SELECT * FROM entry WHERE title MATCH ?
val query = "SELECT * FROM entry WHERE title MATCH '?'"
'?' следует писать без одинарных кавычек. Правильный способ,
val query = "SELECT * FROM entry WHERE title MATCH ?"
Пробовали
= ??