Ваша проблема в том, что в таблице не будет строки, в которой столбец ката имеет значение c , а также (AND
) значение d * 1007. * это невозможно, поскольку столбец может иметь только одно значение, поэтому никакие строки не будут извлечены.
Возможно, вы хотите найти строки, которые имеют либо c OR
d
, в этом случае вы можете использовать: -
String query= ("select kata from TabelAbjad where kata = '"+c+"' OR kata = '"+d+"'");
- т.е.
AND
был изменен на OR
Кроме того, execSQL
не может вернуть результат согласно: -
Выполнить одну инструкцию SQL, которая НЕ является SELECT или любым другим SQL
оператор, который возвращает данные. ExecSQL
Таким образом, вам необходимо либо использовать метод rawQuery
, либо метод удобства query
, последний рекомендуется, если только его ограничения не означают, что его нельзя использовать. Таким образом, вы должны попытаться использовать что-то вроде (ИЛИ вместо AND предполагается): -
public boolean checkdata(String c, String d)
boolean rv = false;
String whereargs = "kata=? OR kata=?"; // the WHERE clause less the WHERE keyword ? for the arguments (used on a 1 for 1 basis)
String[] whereargs = new String[]{c,d}; // The arguments that will be substituted into the SQL
String[] columns = new String[]{"kata"};
Cursor csr = db.query("TabelAbjad",columns,whereclause,whereargs,null,null,null);
if (csr.getCount() > 0) {
rv = true;
}
csr.close();
return rv;
}
- Хотя это может показаться более сложным для кода, у него есть преимущества, поскольку он строит базовый SQL, он защищает от внедрения SQL и корректно заключает / экранирует (заключает значения в одинарные кавычки и т. Д.) Значения) аргументы
- Вы извлекаете данные (строки) в Курсор (в этом случае вы просто хотите узнать, соответствуют ли какие-либо строки заданному критерию, поэтому используется
getCount()
(он возвращает количество извлеченных строк, которое может быть 0, если их нет)) .
Есть ли простые способы проверить, существует ли запрос?
Я полагаю, что вы действительно имеете в виду, чтобы проверить, дал ли запрос какие-либо результаты.
Как сказано выше, запрос возвращает данные через Курсор (как таблица, но согласно запросу, например, вышеупомянутый Курсор будет состоять из ряда строк (0 или более) с одним столбцом с именем kata (то есть запрос SELECT **kata** FROM .....
)) и, следовательно, вам нужно использовать подходящий метод.
Вы можете проверить / получить доступ к многочисленным аспектам / свойствам. Обычно вы бы двигали вокруг курсора (например, while (your_cursor.moveToNext) {.... do things ....}
можно использовать для перемещения по всем строкам курсора). Курсор .
После правильного позиционирования в строке, вы можете использовать get????(column_offset)
для извлечения данных, поступивших из базы данных (где column_offset - целое число с 0, представляющим первый столбец, однако обычно оно значительно разумнее получить фактическое смещение, используя метод getColumnIndex (метод column_name_as_a_string.))
Итак, если вы хотите, чтобы данные (String) в первой строке, которые были извлечены выше в Cursor csr, можно было использовать: -
if (csr.moveToFirst()) {
String mykata = csr.getString(csr.getColumnIndex("kata"));
}
csr.close(); // You should always close a cursor when done with it.