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的问题不能区分表列的名称吗?
真的很糟糕。
请帮忙。
感谢
您的日期字符串'15 -04-2015' 在DD-MM-YYYY
格式,但它似乎它被视为MM-DD-YYYY
在一些点。您没有在您的问题中显示ANY代码,所以我无法确切地告诉您您需要如何解决此问题。一般来说,您需要向数据库指定您正在使用的日期格式,或者切换为将其作为字符串或整数存储在数据库中。你可以看看这个问题的一些答案:Best way to work with dates in Android SQLite
感谢马克B,我认为这是日期问题,但问题是SQL Lite无法区分列名称的变量名称。我的问题是通过重命名上面的列名来解决的。 –
问题通过重命名列名来解决。 –
请注意,SQL lite android会将列表ID作为一个组读取。如果你有很少的表和Entry ID的是类似的SQL精简版会感到困惑。 –