2011-02-08 2 views
2

나는 안드로이드 애플리케이션에 다섯 개의 테이블이있는 데이터베이스를 가지고있다. 나는 쿼리 (WHERE, & &, 또는 OR)에 조건을 넣는 방법을 찾고자 서핑을 해왔다.안드로이드에서 SQL 쿼리를 형성하는 가장 좋은 방법은 무엇입니까?

내 쿼리의 형식은 다음과 같습니다

public Cursor getAlternative(int questionid) { 
    Cursor cursor = mDb.query(DBTABLE_ALTERNATIVE, new String[] { KEY_ALT }, KEY_QID + "=" + questionid, null, null, null, null, null);     
    return cursor; 
} 

하지만 예를 들어, 많은 사람들이 일반 SQL과의 쿼리를 작성 찾을 :

Cursor c = myDB.query("SELECT FirstName,Age" + 
        " FROM " + MY_DATABASE_TABLE 
        + " WHERE Age > 10 LIMIT 7;", 
        null); 

가장 효율적인 방법은 무엇입니까? 나에게 그것은 더 쉬운 형태의 정규 SQL 문이지만, Android Dev 사이트에서 자습서를 읽은 후에 나는 위와 같은 쿼리를 만들기 시작했다.

질문 2 : 첫 번째 방법을 사용하면 어떻게 두 가지 조건을 사용할 수 있습니까? questionidcategoryid의 두 매개 변수가 있다고 가정하면 다음 KEY_CID + "="+ categoryid를 어떻게 넣을 수 있습니까?

나는 & &으로 시도했지만 아무 것도 작동하지 않는 것 같습니다. 감사.

+0

Java StringBuffer 클래스를 읽으십시오. StringBuffer.append() 호출을 묶어 스트링 연결을하는 것보다 더 좋습니다. 전의. StringBuffer 버퍼 = 새 StringBuffer(); – DwB

답변

1

가장 효율적인 방법은 무엇입니까?

이 달려있다 ...하지만 일반적으로 두 번째 방법을 말하는 것이 빠를 것이다. 왜? 쿼리 메서드에서 사용하는 매개 변수를 사용하여 쿼리 문자열을 작성할 필요가 없기 때문입니다.

그러나 오류가 발생하기 쉽기 때문에 첫 번째 방법을 사용하고 싶습니다.

질문 2. 첫 번째 방법을 사용하면 어떻게 두 가지 조건을 사용할 수 있습니까?

이 이런 식으로 작동합니다 :

KEY_QID + "=" + questionid + " AND " +KEY_CATID + "=" + categoryid 
+0

퍼팅 "AND"는 잘되었지만 지금은 분명해 보인다. :). 내 코드는 다시 사용되어야하기 때문에 오히려 오류가 발생하기 쉬운 방법을 사용합니다. 그러나 어떤 식으로 쿼리를 구성하는 것이 가장 좋은지에 대한 의견이 많습니다. 시간 내 줘서 고마워! – kakka47

+0

나는 잠재적 인 문자열 바인딩처럼 네이티브 코드로 질의를 작성하는 것을 지적하고자한다.그래서 첫 번째 방법은 java에서 문자열을 연결하는 것보다 빠르거나 빠를 수 있습니다. – CodeFusionMobile

1

나는 확실하지 않다을 경우 문자열 및 StringBuffers에 대한 간단한 의미는 SQL 엔진이 또한 구문 분석 할 필요가로 (StringBuilder에 더 나은 것) 개최 쿼리 문자열을 다시 보냅니다. db.query() 방법은 쿼리의 일부가 미리 구문 분석 된 방식으로 저장 될 수 있다는 이점이 있습니다 ("PreparedStatement"라고 생각하십시오). 특히 매개 변수가 문자열에 삽입되지 않고 자리 표시자인 경우

예. where KEY_QID=? AND KEY_CATID=?

여기에서 기본 쿼리는 "일정하게 유지되며"시스템이 최적화 할 수 있습니다.

관련 문제