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 に変換するにはどうすればよいですか? SELECTで取得した「緯度」をJavaコードで使う方法がわからないからです!

4

4 に答える 4

1

まず、Android でクエリが Sqlite でどのように機能するかを学びます。Deepak Samuel Rajan がすでに述べたように、少なくとも生のクエリを使用できます。

カーソル カーソル = getReadableDatabase()。rawQuery("あなたのクエリはこちら");

次に、特定の問題に関しては、実際には 2 つの部分で構成されています。1) データベースと通信して必要な情報を抽出します。2) データに対してある種の数学的計算を実行します。

この 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 に答える
1

カーソル カーソル = getReadableDatabase()。rawQuery("あなたのクエリはこちら"); sqlite の使用について詳しくは、こちらを参照してください。

編集 して、プログラム内で計算して保持する必要があるsinとCOSの値を保存するために異なる列が必要です。それを表示する必要がある場合は、関数を呼び出して計算して表示するだけですこれが役立つことを願っています

于 2012-11-08T16:55:08.083 に答える
0

SQLite は SQL のほとんどの機能をサポートしているため、構文が正しい場合は何も変更する必要はありません。

于 2012-11-08T16:53:24.077 に答える
0

理論的には、SQLite はユーザー定義関数をサポートしていますが、実際には、Android の組み込み SQL インターフェースではそれにアクセスできません。

独自のプログラムで計算を行いたくない場合は、NDK を使用して独自の SQLite のコピーをコンパイルする必要があります。

于 2012-11-08T17:55:08.717 に答える