【问题标题】:SQLITE raw query result not the same as in aSQLiteManagerSQLITE 原始查询结果与 aSQLiteManager 中的不同
【发布时间】:2012-11-01 06:46:28
【问题描述】:

我在 SQLitemanager(Android 的 SQL DB 应用程序)中进行以下查询:

SELECT * FROM fahrer, fahrzeuge, nutzungsarten, fahrtenbuch WHERE fahrtenbuch.nutzungsart_id = nutzungsarten._id AND fahrtenbuch.fahrzeuge_id = fahrzeuge._id AND fahrtenbuch.fahrer_id = fahrer._id ORDER BY SUBSTR(fahrtenbuch.startdatum,7,4), SUBSTR(fahrtenbuch.startdatum,4,2), SUBSTR(fahrtenbuch.startdatum,1,2) ASC

返回的订单符合预期。日期按 dd.mm.yyyy 正确排序。

但是当我在 DB-Helper 类 中执行查询时,顺序不一样。 在 DB-Helper 类中:

final String MY_QUERY = "SELECT * FROM fahrer, fahrzeuge, nutzungsarten, fahrtenbuch WHERE fahrtenbuch.nutzungsart_id = nutzungsarten._id AND fahrtenbuch.fahrzeuge_id = fahrzeuge._id AND fahrtenbuch.fahrer_id = fahrer._id ORDER BY SUBSTR(fahrtenbuch.startdatum,7,4), SUBSTR(fahrtenbuch.startdatum,4,2), SUBSTR(fahrtenbuch.startdatum,1,2) ASC";
return mDb.rawQuery(MY_QUERY, null);

在我的活动中:


Cursor curCSV = mDbHelper.fetchAllFahrtenbuchASC();
curCSV.moveToFirst();
while(curCSV.moveToNext()) 
{
   System.out.println("Date of entry: " +curCSV.getString(18));
} 

curCSV.close();

有谁知道为什么这不起作用?

【问题讨论】:

    标签: android sqlite date sql-order-by


    【解决方案1】:

    这段代码:

    curCSV.moveToFirst();
    while(curCSV.moveToNext()) ...
    

    跳过第一条记录。 改为使用:

    if (curCSV.moveToFirst())
        do {
            ...
        } while (curCSV.moveToNext());
    

    【讨论】:

    • do/while 组合没有变化。问题不仅是第一个条目。似乎完全忽略了“ORDER BY”语句。
    • 哦,伙计。弄清楚了。由于复制了函数的一部分,我错了。尽管如此,我也将循环更改为您的 do/while。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2015-12-20
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多