Как написать подготовленные заявления для этого запроса? - PullRequest
0 голосов
/ 14 мая 2018

Привет, я написал запрос на соединение для моего приложения и его работы. Следующее мое требование - преобразовать этот запрос в подготовленный оператор, в котором я застрял.

"SELECT * FROM " + TableA.TABLE + " as d LEFT JOIN " + TableB.TABLE + " as c ON d."+ TableA.DAMAGECODE + "=c." + TableB.DAMAGECODE + " AND d."
+ TableA.INDEX + "=c." + TableB.DAMAGECODEINDEX + " AND d."
+ TableA.OBJECTTYPE + "=c." + TableB.OBJECTCLASS + " WHERE d."+ TableA.LEAF + " = '1' AND d." + TableA.OBJECTTYPE + " = ? AND " + "(d."+ TableA.DAMAGECODE + " LIKE ? OR d." + TableA.DAMAGETEXT + " LIKE ?) AND c." + TableB.CONSTRUCTIONSERIES + " = ? ORDER BY " + TableA.DAMAGETEXT;

cursor = db.rawQuery(sql,new String[]{String.valueOf(objectClass),"'%" + query + "%'","'%" + query + "%'",constructionSeries});

Когда я запускаю необработанный запрос, я получаю результаты, но когда я запускаю подготовленные выше операторы, я получаю счетчик всегда ноль

1 Ответ

0 голосов
/ 14 мая 2018

Вам не нужно добавлять ' самостоятельно, когда вы передаете String параметры, PreparedStatement сам будет управлять ими.

"'%" + query + "%'"

На данный момент у вас есть условие типа

where columnA = "'%somethingToFind%'"

Таким образом, если у вас нет значения в columnA, например 'somethingToFindInColumnA' (обратите внимание на кавычку в начале и конце этого String).Вы никогда не получите результат.

Удалите их, чтобы получить что-то вроде:

"%" + query + "%"

Полный ответ:

db.rawQuery(sql,new String[]{String.valueOf(objectClass),"'%" + query + "%'","'%" + query + "%'",constructionSeries});

Стать:

db.rawQuery(sql,new String[]{String.valueOf(objectClass),"%" + query + "%","%" + query + "%",constructionSeries});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...