2013-04-24 65 views
1

我想通過使用BETWEEN運算符的Android比較sqlite中的緯度和經度值。問題是這個值總是被比較,就像它是一個字符串一樣,我不知道如何將它作爲一個數字進行比較。我發現這是因爲使用查詢「select * from database orderby latitude」返回一個不按數字順序排列的列表。 KEY_LAT和KEY_LONG我已經存儲爲TEXT和REAL,並且獲得相同的輸出。請告訴我你需要什麼信息。在SQLite中比較Double NOT字符串

下面是該查詢:

  double high_lat = curr_lat + 100.0; 
    double high_long = curr_longitude + 100.0; 
    double low_lat = curr_lat - 100.0; 
    double low_long = curr_longitude - 100.0; 
     Cursor cursor = db.query(TABLE_NAME,  new String[]      {KEY_ID, KEY_NAME, KEY_ADDR, KEY_LAT, KEY_LONG}, select, 
     new String[] 
       {KEY_LAT + " BETWEEN " + low_lat + " AND " 
       + high_lat + " AND " + KEY_LONG + " BETWEEN " + low_long + " AND " 
       + high_long}, 
      null, null, null); 
+0

你確定你的「選擇由緯度從數據庫中以便*」返回其有序既不數字或字母列表?我不認爲這是可能的。 – 2013-04-24 21:23:29

+0

這應該工作,如果這些值實際上存儲爲REAL。我會建議實際的問題在於你存儲數據的方式,因爲如果你實際上將數值存儲爲數字,它將起作用。 – antlersoft 2013-04-24 21:25:23

+0

是的antlersoft我現在將值存儲爲雙打,現在他們正確地排序。我想主要的問題雖然與聲明的選擇部分有關。我使用了一個rawQuery,現在它工作。請問你或某人請舉例說明如何使用具有多個選擇的Android db.query(table,columns [],selection,selection args [])語句來形成我的查詢?謝謝!!! – user2317198 2013-04-25 02:04:02

回答

1

投下你輸入REAL作爲最後手段的方法。

...KEY_LONG + " BETWEEN CAST(" + low_long + " AS REAL) AND CAST(" + high_long +" AS REAL)"