SQL lite查询读取错误Id's

问题描述:

这是mysql与sql lite date问题之间的长期争论。我有一个复杂的查询返回多个数据。SQL lite查询读取错误Id's

我读服务器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 + “ON M._ID = ServiceInfo.m_id” + “LEFT OUTER JOIN” + U_TABLE + “ON MAIN_TABLE.u_id = U_TABLE._ID”

问题,当我读取MAIN_TABLE开始其含有CREATION_TIME和upation_time,SERVICE_INFO_TABLE还包含creation_time,updation_time。

但是,该表分别包含不同的日期和时间。光标为所有实体返回相同的日期和时间。

看来游标方法感到困惑,并返回从ServiceInfo表中读取相同的数据和时间。

我深入挖掘调试模式,而SQL精简版阅读查询,我看到奇怪的事情发生在那里。下面是阅读示例

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表还包含相同的creation_time和updation_time。

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

来自光标调试模式的mColumns显示VTable的“updation_time”和“creation_time”,与ServiceInfo表相同。

sql lite的问题不能区分表列的名称吗?

真的很糟糕。

请帮忙。

感谢

+0

问题通过重命名列名来解决。 –

+0

请注意,SQL lite android会将列表ID作为一个组读取。如果你有很少的表和Entry ID的是类似的SQL精简版会感到困惑。 –

您的日期字符串'15 -04-2015' 在DD-MM-YYYY格式,但它似乎它被视为MM-DD-YYYY在一些点。您没有在您的问题中显示ANY代码,所以我无法确切地告诉您您需要如何解决此问题。一般来说,您需要向数据库指定您正在使用的日期格式,或者切换为将其作为字符串或整数存储在数据库中。你可以看看这个问题的一些答案:Best way to work with dates in Android SQLite

+0

感谢马克B,我认为这是日期问题,但问题是SQL Lite无法区分列名称的变量名称。我的问题是通过重命名上面的列名来解决的。 –