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
Problem gelöst durch Umbenennen der Spaltennamen. –
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. –