본문 바로가기
Android

[Android] SQLite 쿼리

by GGoris 2014. 12. 18.
반응형

[Android] SQLite 쿼리


출처

안드로이드 데이터베이스 프로그래밍

제이슨 웨이 지음|허윤규 욺김

에이콘 출판사





안드로이드에서 SQLite 를 쿼리하는 방법은 3가지가 있습니다.


Cursor rawQuery(String sql, String[] selectionArgs)

SQLiteDatabase클래스에서 제공되는 메소드.


sql인자로 직접 쿼리 문을 작성하여 전달합니다.

쿼리에 대해 지식이 있는 사람은 사용하기 편한 메소드입니다.

selectionArgs는 Where과 같이 인자가 필요한 필터의 메개변수 값을 전달 하는 역할을 합니다.

예를 들어

  rawQuery("Select * from " + StudentTable.TABLE_NAME + 

" where " + StudentTable.STATE + "= ? OR " + StudentTable.STATE + "=?", 

new String[]{"IL","AR"});

  와 같이 사용할 수 있습니다.





Cursor query(String table, String[] columns, String selection, String[] SelectionArgs,

String groupBy, String having, String orderBy)

SQLiteDatabase클래스에서 제공되는 메소드.


query메소드는 직접적인 쿼리문을 입력하지 않습니다.

매개변수들은 다음과 같습니다.

String table 테이블 이름과

String[] columns 가져올 컬럼들

String selection WHERE문(WHERE를 제외한)

String[] SelectionArgs WHERE문에 전달해줄 값들

String groupBy 집합함수 컬럼을 추가해 특정 컬럼의 중복되는 값을을 카운트 할 수 있습니다.

String having groupBy절에서 사용할 수 있는 필터로, groupBy에서 카운팅된 수를 원하는 범위로 필터링 할 수 있습니다.

String orderBy 정렬방식. 특정컬럼의 값을 기준으로 오름차순 혹은 내림차순으로 정렬할 수 있습니다.


예를 들어

String colName = "COUNT(" + StudentTable.STATE + ")";

query(StudentTable.TABLE_NAME, new String[] {StudentTable.STATE, colName}, null,

  null, StudentTable.STATE,colName + " > 1", StudentTable.STATE + "ASC");

과 같이 사용할 수 있습니다.





String buildQueryString(Boolean distinct, String table, String[] columns, String where,                                 String groupBy, String having, String orderBy, String limit)

SQLiteQueryBuilder클래스에서 제공되는 메소드.


buildQueryString는 query메소드와 유사하지만 단순히 쿼리 문자열만 리턴해 주므로

rawQuery메서드를 이용해수행해 줘야 합니다.


예를 들어,

 String query1 = SQLiteQueryBuilder(......,...,..,.);

SQLiteDatabase.rawQuery(query1, null);

과 같이 사용됩니다.






distinct는 특정 칼럼에 대해서 구별된 값을 갖는 행의 부분 집합만 반환하게됩니다.

limit는

 rawQuery메서드에서는 " LIMIT 1,3"을 추가하여 1행부터 3행까지만 출력 혹은 " LIMIT 3,5"를 추가해 3행부터 5항까지 보여주도록 해주지만,

 query메서드와 SQLiteQueryBuilder에서는 limit 매개변수 위치에 "3"이라는 값을 주어 1행부터 3행을 출력할 수 있습니다. 이는 시작 행을 정할 수 없음을 의미합니다.

반응형

댓글