2012-10-21 66 views
0

當我有值的SQLite數據庫是這樣的:無效數據查詢的Android SQLite數據庫

_id, airportcode, lat, lan 
1, AUS, 31.0672, 97.8289 
... 

當我打開SQLiteDatabase瀏覽器數據庫,並執行:

SELECT DISTINCT _id, airportcode, lat, lon FROM latlon WHERE airportcode="AUS" 

它返回:

1, AUS, 31.0672, 97.8289 

在我的Android應用程序中,我有這個:

public LatLonResult getLatLonFor(String airportCode){ 

    Cursor mCursor = myDataBase.query(
      true, DB_TABLE, 
      new String[] {KEY_ID, KEY_AIRPORTCODE, KEY_LAT, KEY_LON}, 
      String.format("%s=\"%s\"", KEY_AIRPORTCODE, airportCode), 
      null, null, null, null, null); 

    LatLonResult result = null; 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 

     result = new LatLonResult(); 
     result.setAirportCode(mCursor.getString(
       mCursor.getColumnIndexOrThrow(KEY_AIRPORTCODE))); 

     result.setLat(mCursor.getDouble(
       mCursor.getColumnIndexOrThrow(KEY_LAT))); 

     result.setLat(mCursor.getDouble(
       mCursor.getColumnIndexOrThrow(KEY_LON))); 
    } 

    return result; 
} 

LatLonResult只是getters/setters。

然而,當我運行上面的代碼,因此具有以下值:

result.getAirportCode: AUS 
result.getLat: 97.67 
result.getLon: null 

緯度有錯誤的值,經度爲空。

我在這裏做什麼顯然不對?如果不是,我可以提供哪些其他信息?

回答

1

在代碼中列出您有:

result.setLat(mCursor.getDouble(
      mCursor.getColumnIndexOrThrow(KEY_LAT))); 

    result.setLat(mCursor.getDouble(//second call to setLat 
      mCursor.getColumnIndexOrThrow(KEY_LON))); 

我想這應該是

result.setLat(mCursor.getDouble(
      mCursor.getColumnIndexOrThrow(KEY_LAT))); 

    result.setLon(mCursor.getDouble(
      mCursor.getColumnIndexOrThrow(KEY_LON))); 
+0

我是個白癡。謝謝! – ConditionRacer

0

問題可能是列索引並不總是與您選擇的語句的順序相同。將數據從光標拖出時,應該調用getColumnIndex並將返回值傳遞給getDouble調用。

+0

我有,在我的代碼,我改變了它,當我開始排除故障。我會更新上面的代碼來解決這個問題。感謝您的建議。 – ConditionRacer

+0

結果列始終保證與「SELECT」中的順序相同。 –