-
(3분 읽기) 안드로이드 SQLite 쿼리 마스터하기! 🖥️Android 개발/데이터 처리 및 관리 2025. 2. 12. 21:49
"안드로이드에서 데이터 조회할 때, 어떻게 해야 하지?" 🤔
SQLite에서 데이터를 가져오려면 쿼리(Query) 를 실행해야 하는데, 방법이 여러 가지야!
오늘은 query(), SQLiteQueryBuilder, rawQuery()를 활용해서 효율적으로 데이터를 조회하는 방법을 정리해볼게! 🎯
✅ query()를 활용한 기본적인 데이터 조회
📌 query() 기본 개념
query()는 SQL의 SELECT 문을 자동으로 생성하고 실행하는 메소드야!
쿼리를 쉽게 작성할 수 있어서, 테이블 하나에서 데이터를 가져올 때 자주 사용돼!📌 query() 메소드 기본 구조
val cursor = db.query( "테이블명", arrayOf("컬럼1", "컬럼2"), // 조회할 컬럼들 (null이면 모든 컬럼) "WHERE 조건절", arrayOf("조건 값"), "GROUP BY", "HAVING", "ORDER BY" )
✔ null을 넣으면 해당 절을 생략 가능!
✔ WHERE 절에서 ?를 사용하면 SQL 인젝션 방지 가능!
📌 query() 실전 예제
📌 테이블 전체 조회
val cursor = db.query("tbl_books", null, null, null, null, null, null)
실행되는 SQL:
SELECT * FROM tbl_books;
📌 특정 컬럼만 조회 + 정렬 적용
val asColumnsToResult = arrayOf("title", "id") val titleSortOrder = "title ASC" val cursor = db.query("tbl_books", asColumnsToResult, null, null, null, null, titleSortOrder)
실행되는 SQL:
SELECT title, id FROM tbl_books ORDER BY title ASC;
📌 WHERE 조건 추가 (특정 ID 값 조회)
val cursor = db.query("tbl_books", null, "_id=?", arrayOf("9"), null, null, null)
실행되는 SQL:
SELECT * FROM tbl_books WHERE _id = 9;
✅ SQLiteQueryBuilder로 복잡한 쿼리 작성하기!
테이블이 하나가 아니라 여러 개의 테이블을 조인해야 할 때, SQLiteQueryBuilder를 사용하면 가독성이 좋아지고, 유지보수가 쉬워져!
📌 INNER JOIN을 사용해 책 정보 + 저자 정보 함께 가져오기
import android.database.sqlite.SQLiteQueryBuilder val queryBuilder = SQLiteQueryBuilder() queryBuilder.setTables("tbl_books INNER JOIN tbl_authors ON tbl_books.authorid = tbl_authors.id") val asColumnsToResult = arrayOf( "tbl_books.title", "tbl_books.id", "tbl_authors.authorname", "tbl_authors.authoralias", "tbl_books.authorid" ) val orderBy = "title ASC" val cursor = queryBuilder.query(db, asColumnsToResult, null, null, null, null, orderBy)
실행되는 SQL:
SELECT tbl_books.title, tbl_books.id, tbl_authors.authorname, tbl_authors.authoralias, tbl_books.authorid FROM tbl_books INNER JOIN tbl_authors ON tbl_books.authorid = tbl_authors.id ORDER BY title ASC;
📌 SQLiteQueryBuilder를 쓰면 좋은 점!
✔ SQL을 직접 작성하지 않아도 됨 → 가독성이 좋아짐!
✔ 유지보수할 때 편리 → 테이블이 추가되거나 바뀌어도 수정이 쉬움
✅ rawQuery()를 활용한 직접 SQL 실행
"근데 난 SQL을 직접 작성해서 실행하고 싶은데?"
그럴 땐 rawQuery()를 사용하면 돼!📌 UNION을 사용해 책 제목 + 저자 이름을 한 번에 가져오기
val sqlUnionQuery = StringBuilder() sqlUnionQuery.append(" SELECT title AS Name, 'tbl_books' AS OriginalTable FROM tbl_books WHERE title LIKE ? ") sqlUnionQuery.append(" UNION ") sqlUnionQuery.append(" SELECT (authorname || ' ' || authoralias) AS Name, 'tbl_authors' AS OriginalTable FROM tbl_authors WHERE authorname LIKE ? ") sqlUnionQuery.append(" ORDER BY Name ASC; ") val cursor = db.rawQuery(sqlUnionQuery.toString(), arrayOf("%안드로이드%", "%표%"))
실행되는 SQL:
SELECT title AS Name, 'tbl_books' AS OriginalTable FROM tbl_books WHERE title LIKE '%안드로이드%' UNION SELECT (authorname || ' ' || authoralias) AS Name, 'tbl_authors' AS OriginalTable FROM tbl_authors WHERE authorname LIKE '%표%' ORDER BY Name ASC;
📌 rawQuery()를 쓰면 좋은 점!
✔ SQL을 직접 작성할 수 있어서 자유도가 높음
✔ JOIN, UNION 같은 복잡한 SQL 실행 가능
🚀 SQLite 쿼리 마스터! 이렇게 정리하자!
메소드 특징 언제 사용하면 좋을까? query() 자동 SQL 생성 & 실행 간단한 SELECT 조회 (테이블 1개) SQLiteQueryBuilder 복잡한 SQL을 구조적으로 작성 JOIN, 여러 테이블 조회 rawQuery() SQL 직접 작성 복잡한 쿼리, UNION, 다이나믹 SQL 📌 WHERE, ORDER BY, GROUP BY 같은 SQL 절을 query()에서 직접 적을 필요 없음!
📌 JOIN이 필요하면 SQLiteQueryBuilder가 편하고 가독성도 좋음!
📌 rawQuery()는 SQL을 직접 작성할 때 자유도는 높지만, 유지보수는 더 신경 써야 함!이제 SQLite에서 원하는 데이터 조회, 문제없겠지? 😉
실제 프로젝트에서도 활용하면서 익숙해지면 개발 속도도 훨씬 빨라질 거야! 💪🔥'Android 개발 > 데이터 처리 및 관리' 카테고리의 다른 글
(2분 읽기) 안드로이드 SQLite Cursor 완전 정복! 데이터 탐색 쉽게 해보자 🖥️ (0) 2025.02.12 (1분 읽기) 안드로이드에서 SQLite? 어렵지 않아요! 데이터 관리 쉽게 해보자 🖥️ (0) 2025.02.12 (1분 읽기) 안드로이드 SQLite 완전 정복! 데이터 저장 & 트랜잭션 관리 🖥️ (0) 2025.02.12 (30초 읽기) SQLite3: 가볍고 강력한 파일 기반 데이터베이스! 🖥️ (0) 2025.02.12 (30초 읽기) Room DB: 안드로이드 데이터 저장, 이게 답이다! 🖥️ (0) 2025.02.12