Как запросить SQLite по целому числу? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть таблица SQL, подобная следующей:

ID(string)    Name(string)    Width(double)   Height(double)   Selected(int)

12345678      Book            210             297              1
12345679      Display         530             326              0
12345680      Phone           70              140              0

Я могу запросить их по идентификатору и имени, передав аргумент String без проблем, но все запросы типа int и double возвращают нуль.Почему?

Это код, который я пробовал:

Cursor cursor = mDatabase.query(  "Objects",null, "Selected" + " = ?", new String[]{String.valueOf(1)},null,null,null);
ObjectDataBase.ObjectCursor objectCursor = new 
ObjectDataBase.ObjectCursor(cursor);
try {
    if (objectCursor.getCount() == 0) {  return null;  }
    objectCursor.moveToFirst();
    return objectCursor.getObject();
} finally { cursor.close();}

ObjectDataBase - это класс базы данных, а ObjectCursor - это оболочка курсора и внутренний класс ObjectDataBase.

Когда я просматриваю базу данных с помощью браузера БД, данные верны, так что еще может быть не так?

1 Ответ

1 голос
/ 30 мая 2019

Когда я просматриваю базу данных с помощью браузера БД, данные верны, так что еще может быть не так?

a) Данные в браузере БД могут не совпадать с данными наустройство.

  • Это частая причина проблем.

  • Чтобы исключить это, я бы предложил выполнить запрос без предложения select, чтобы все строки возвращались вместе с некоторой базовой отладкой

например,

Cursor cursor = mDatabase.query("Objects",null, "Selected" + " = ?", new String[]{String.valueOf(1)},null,null,null);
Log.d("CURSORINFO","The Cursor has " + String.valueOf(cursor.getCount()) + " rows."); //<<<<<<<<<< 4 DEBUG
DatabaseUtils.dumpCursor(cursor); //<<<<<<<<<< 4 DEBUG

ObjectDataBase.ObjectCursor objectCursor = new 
ObjectDataBase.ObjectCursor(cursor);
try {
    if (objectCursor.getCount() == 0) {  return null;  }
    objectCursor.moveToFirst();
    return objectCursor.getObject();
} finally { cursor.close();}
  • Если первое сообщение в журнале сообщает о наличии 0 строк, то в таблице нет данных.
  • Если у вас естьданные в таблице, а затем вывод метода dumpCursor выведет все данные.Вы должны убедиться, что она соответствует ожидаемой для таблицы.

  • Если данные соответствуют ожиданиям, тогда повторно введите предложение select и повторите процедуру.Счетчик строк равен 0, и проблема заключается в предложении select.

b) Заключение кода в предложение try

  • Это может скрытьполезная информация, если есть основное исключение.

  • Ваш код будет лучше: -

    ObjectType rv = null;
    if (objectCursor.moveToFirst()) {
        rv = objectCursor.getObject();
    }
    cursor.close();
    return rv;
    
  • Если произойдет исключение, вы узнаете об этом.

в) Код обертки курсора неправильно присваивает значения.

  • Поскольку код не включен в вопрос, то невозможно сказать что-либо, кроме проверки кода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...