2016-04-15 14 views
0

Es war lange Kampf zwischen MySQL und SQL-Lite-Problem. Ich habe eine komplexe Abfrage, die mehrere Daten zurückgibt.SQL Lite-Abfrage liest falsche IDs

Ich lese Server Json Objekte und speichern Sie sie in SQL-Lite Android war in Ordnung. Also habe ich eine Abfrage, die wie unter einem

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

Das Problem beginnt, wenn das i MAIN_TABLE gelesen, die enthält CREATION_TIME und upation_time, Die SERVICE_INFO_TABLE enthält auch creation_time, updation_time.

Die Tabelle enthält jedoch jeweils ein anderes Datum und eine andere Uhrzeit. Der Cursor gibt dasselbe Datum und dieselbe Uhrzeit für alle Entitäten zurück.

Es scheint, die Cursor-Methode wurde verwirrt und die gleichen Daten und Uhrzeit aus der ServiceInfo-Tabelle gelesen.

Ich grabe tiefer in Debugging-Modus, während SQL Lite die Abfrage lesen, sah ich seltsame Dinge passiert dort drüben. Unten ist das Lesebeispiel

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))); 

Also die ServiceInfo-Tabelle enthält auch die gleichen creation_time und updation_time.

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

mColumns aus Cursor-Debugging-Modus zeigt "updation_time" und "creation_time" für VTable und dasselbe wie für ServiceInfo-Tabelle.

Kann dieses Problem von SQL Lite nicht Tabellenspaltennamen unterscheiden?

Das ist wirklich scheiße.

Hilfe bitte.

Dank

+0

Problem gelöst durch Umbenennen der Spaltennamen. –

+0

Bitte beachten Sie, dass SQL Lite Android die Spalte Tabelle IDs als eine Gruppe liest. Wenn Sie nur wenige Tabellen haben und die Entry-IDs ähnlich sind, wird SQL Lite verwirrt. –

Antwort

0

Ihr Datum Zeichenfolge '15 -04-2015' ist in einem DD-MM-YYYY Format, aber es scheint es, als MM-DD-YYYY an einem gewissen Punkt behandelt wird. Sie zeigen nicht ANY Code in Ihrer Frage, so kann ich Ihnen nicht genau sagen, wie Sie das lösen müssen. Im Allgemeinen müssen Sie das von Ihnen verwendete Datumsformat für die Datenbank angeben oder es als String oder Integer in der Datenbank speichern. Sie können sich einige Antworten auf diese Frage ansehen: Best way to work with dates in Android SQLite

+0

Danke Mark B, ich dachte, es war das Datum Problem, aber das Problem ist, sql lite konnte nicht den Variablennamen für die Spaltennamen unterscheiden. Mein Problem wurde jedoch durch Umbenennen der obigen Spaltennamen gelöst. –