0

我有这个查询

SELECT
   id,
   ssid,
   bssid,
   capabilities,
   level,
   frequency,
   geolat,
   geolong,
   nickname,
   (
      " + rangeDouble + " * ACOS( (SIN( " + pi + " * " + geoLat + " / 180 ) * SIN( " + pi + " * lat / 180 ) ) + ( COS( " + pi + " * " + geoLat + " / 180 ) * COS( " + pi + " * lat / 180 ) * COS( ABS( ( " + pi + " * " + geoLng + " / 180 ) - ( " + pi + " * longg / 180 ) ) ) ) )
   )
   AS distanza 
FROM
   wifiTable 
HAVING
   distanza < " + rangeDouble + " 
ORDER BY
   distanza LIMIT 0,
   20",
   null
)

distanza就像英语中的距离

如何将此查询从 SQL 转换为 SQLite?因为我不知道如何在java代码中使用SELECT得到的“lat”!

4

4 回答 4

1

光标 cursor = getReadableDatabase()。rawQuery("你的查询在这里"); 请参阅此处以了解有关使用 sqlite 的更多信息

编辑 你需要有不同的列来存储你必须计算并保存在程序中的 sin 和 COS 值,当你需要显示它时只需调用一个函数计算它并显示这里提到了类似的问题希望这会有所帮助

于 2012-11-08T16:55:08.083 回答
1

首先了解查询如何在 Android 下使用 Sqlite。正如 Deepak Samuel Rajan 已经提到的那样,您至少可以使用原始查询:

光标 cursor = getReadableDatabase()。rawQuery("你的查询在这里");

然后,关于您的具体问题,它实际上由两部分组成:1)与数据库通信以提取您需要的信息。2)对数据进行某种数学计算。

最好将这两个问题分开,然后解决问题会变得容易得多。

例如,假设 x 和 y 坐标存储在数据库中,并且您想根据它们计算距离:

 // get x and y coordinates from databas
 cursor = from query
 x = retrieve from cursor
 y = retrieve from cursor

 // calculate distance: part of your code
  distance = sqrt(x^2 + y^2)
于 2012-11-08T17:50:25.923 回答
0

SQLite 支持 SQL 的大多数功能,因此如果您的语法正确,您不需要更改任何内容。

于 2012-11-08T16:53:24.077 回答
0

理论上,SQLite 支持用户定义的函数,但实际上,Android 的内置 SQL 接口并不能让您访问它。

如果您不想在自己的程序中进行计算,则必须使用 NDK 编译您自己的 SQLite 副本。

于 2012-11-08T17:55:08.717 回答