2016-04-15 4 views
0

Это была длинная битва между mysql и sql lite датой. У меня сложный запрос, который возвращает несколько данных.SQL Lite-запрос читает неверный идентификатор

Я прочитал серверные объекты Json и сохранил их в sql lite android. Так я сделал запрос, который, как показано ниже один

"SELECT * FROM" + MAIN_TABLE + "LEFT OUTER JOIN" + SERVICE_INFO_TABLE + "ON ServiceInfo.main_id = MAIN_TABLE._ID" + "LEFT OUTER JOIN" + M_USER_TABLE + "в M._ID = ServiceInfo.m_id" + "LEFT OUTER JOIN" + U_TABLE + "в MAIN_TABLE.u_id = U_TABLE._ID"

проблема начинается, когда я прочитал MAIN_TABLE, который содержит CREATION_TIME и upation_time, SERVICE_INFO_TABLE также содержит create_time, updation_time.

Однако таблица содержит разные даты и время соответственно. Курсор возвращает те же дату и время для всей сущности.

Кажется, что метод курсора запутался и возвращает те же данные и время, которые читаются из таблицы ServiceInfo.

Я копаю глубже в режим отладки, в то время как SQL Lite читает запрос, я видел странные вещи, происходящие там. Ниже приведен пример чтения

Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null); 

    if (cursor != null && cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     do { 
      Log.d("dummy", "dummy stopper"); 
      VParcelable vParcelable = new VParcelable(); 
      vParcelable.setId(cursor.getInt(cursor.getColumnIndex(VEntry._ID))); 
      vParcelable.setModel(cursor.getString(cursor.getColumnIndex(VEntry.MODEL))); 
      vParcelable.setYearMdl(cursor.getInt(cursor.getColumnIndex(VEntry.YEAR_MODEL))); 
          vParcelable.setCreationTime(cursor.getString(cursor.getColumnIndex(VEntry.CRE_TIME))); 
      vParcelable.setUpdationTime(cursor.getString(cursor.getColumnIndex(VEntry.UPA_TIME))); 

Таким образом, таблица ServiceInfo также содержит то же время создания и время updation_time.

vParcelable.setCreationTime (cursor.getString (cursor.getColumnIndex (VEntry.CRE_TIME)));

mКолонки из режима отладки курсора показывают «updation_time» и «creation_time» для VTable и то же, что и для таблицы ServiceInfo.

Эта проблема sql lite не может различать имена столбцов таблицы?

Это действительно отстой.

Помогите пожалуйста.

Благодаря

+0

Проблема решена путем переименования имен столбцов. –

+0

Обратите внимание, что SQL lite android считывает идентификатор таблицы столбцов как группу. Если у вас несколько таблиц и идентификаторы Entry похожи, SQL lite запутается. –

ответ

0

Ваша строка даты '15 -04-2015' в формате DD-MM-YYYY, но оказывается, что в настоящее время рассматривается как MM-DD-YYYY в какой-то момент. Вы не показываете код ANY в своем вопросе, поэтому я не могу точно сказать, как именно вам это нужно. В общем, вам нужно указать в базе данных формат даты, который вы используете, или переключиться на сохранение его в виде строки или целого в базе данных. Вы можете посмотреть некоторые ответы на этот вопрос: Best way to work with dates in Android SQLite

+0

Спасибо Mark B, я думал, что это проблема даты, но проблема в том, что sql lite не может отличить имя переменной для имен колонок. Однако моя проблема была решена путем переименования названий столбцов. –

Смежные вопросы