SQL 쿼리 문자열 구성에서 이상한 동작이 발생하여 Android 응용 프로그램에 장애가 발생합니다.Java에서 double을 String으로 변환 할 때 이상한 동작이 발생했습니다.
Caused by: android.database.sqlite.SQLiteException: near ")": syntax error: , while
compiling: SELECT [...], (0.6773931613745379*coslat*(coslng*0.9999276712889913
+sinlng*0.012027143*)+0.7356211694364222*sinlat) [...]
오류가 여기에서 정확하게 제공 : sinlng*0.012027143*)
< == *) 말
이 문자열은 다음과 같은 기능에 의해 사례입니다에서 : 당신으로
public static String buildDistanceQuery(double latitude, double longitude) {
final double coslat = Math.cos(MathUtils.deg2rad(latitude));
final double sinlat = Math.sin(MathUtils.deg2rad(latitude));
final double coslng = Math.cos(MathUtils.deg2rad(longitude));
final double sinlng = Math.sin(MathUtils.deg2rad(longitude));
return "(" + coslat + "*" + LocationColumns.COSLAT
+ "*(" + LocationColumns.COSLNG + "*" + coslng
+ "+" + LocationColumns.SINLNG + "*" + sinlng
+ ")+" + sinlat + "*" + LocationColumns.SINLAT
+ ")";
}
여기에 오류가 있습니다 볼 수 있습니다. LocationColumns.SINLNG + "*" + sinlng + ")"
은 sinlng*0.012027143*)
이되어서 sinlng이 double 일 때 어떻게 이것이 가능할 수 있는지 보지 못했습니다 ...
문제를 재현 할 수 없습니다. 충돌은 Android 마켓 콘솔에서 발생하며 모든 컨텍스트가 없습니다. 그것은 독특한 충돌이 아니며 여러 번 발생했습니다.
StringBuilder()를 사용할 수는 있지만 문제를 해결할 수 있는지 확실하지 않습니다.
String으로 변환 할 때 double이 "*"를 생성하는 방법에 대한 단서가 있습니까?
그럴 수 있습니다. 하지만 귀하의 코드가 오류 메시지와 일치하지 않습니다.예를 들어, 코드는 중첩 된 두 세트의 괄호를 만드는 것처럼 보이지만 오류 메시지에는 하나의 세트 만 있습니다. 아마도 다른 코드 나 이전 버전을보고있을 것입니다. –
이것이 매개 변수화 된 SQL 쿼리가 발명 된 이유입니다. – mcfinnigan
정확하게 반환 된 문자열을 기록하고 질문에 붙여 넣을 수 있습니까? – waqaslam