인프런 커뮤니티 질문&답변

박정훈님의 프로필 이미지
박정훈

작성한 질문수

윤재성의 Java 기반 Android 9.0(pie) App 개발 심화 2단계

SQLite 데이터베이스 2

SQlight 데이터 베이스 관련 질문 입니다.

작성

·

258

0

안녕하세요. 좋은 강의 잘 보고 있습니다.  하루하루 배우는 재미가 있어서 기분이 좋습니다. 감사합니다.

저는 흔히 말하는 컴맹에 가까운 사람입니다.  자바기초 문법만 조금 알고 있고, db? sql? 아무것도 모르는 상태에서 공부하고 있어서 막히는 부분이 많습니다.  그러다 보니 질문 할게 많이 생기네요.. 혼자 구글링 하면서 알아내고 있는데막히는게 있어서 질문 드립니다.

 앱에서 리스트뷰에 입력된 데이터를 검색하는 기능을 추가 하려고 시도 중입니다.

검색한 값의 배열 인덱스를 기억한 배열을 만들어서 반복문을 통해서 검색 해봤는데 잘 작동은 합니다. 그런데 완벽하게 단어를 다 입력해야 검색이 되는 단점이 있어서 

단어의 일부만 입력해도 검색이 가능하도록 고민해봤는데요 

입력한 단어의 숫자만큼 배열에 있는 모든 값을 일일히 단어 숫자의 개수만큼  차례대로 조합해서 비교 하는 방식으로 코드를 짜 보려고 했는데요.  너무 비효율적이고 느리고 힘들 것 같다는 생각이 들었어요.  거기다가 영문 대소문자 구분부터, 결과내 검색 옵션을 적용 및 항목별 검색까지 적용 하려고 해 보니 머리가 터지려고 하네요.

그래서 구글링 해보면서  SQlite 에 select? 기능을 이용하면 쉽게 검색이 가능할것 같다는 생각이 들었습니다.  

배열 값을 일일히 입력해서 그 배열안에서 검색하는 것은 크게 어렵지 않을것 같습니다. 개수가 적으니 속도도 그만큼 빠를 것 같아요. 

하지만 db에 입력된 값을 가져와서 배열을 구성하고 다시 그 배열에서 반복문을 통해서 검색을 하려면 느리고 복잡할것 같습니다.

여기서 궁금한점이 생겼습니다.

1. 저장된 db에서 검색된 db를 가져오는 방식은 어떻게 이루어 지나요? 

저는 아래 두 방법 정도 있다고 생각했는데요. 혹시 잘못 알고 있는지 궁금합니다.

1) db에서 필요한 db를 검색해서 -> db에서 데이터를 갖고와서 db배열을 만든다->그 배열을 리스트 뷰에 입력한다.

2) 처음 앱이 시작하면 db를 전부 항목별로 가져와서 배열에 입력한다.->그 배열에서 검색한 후 ->리스트뷰에 입력한다.

2.앱에 있는 검색 창(EditText)에 서 가져온 값을 자바에 입력된 배열과 배교할 필요없이 곧바로 SQlite 을 통해서 db파일에서 검색이 가능한가요?    

3.혹시 앱에 검색기능을 추가하기 위해서 데이터베이스 공부가 필요하다면 추천 커퓨니티나 도서가  있을까요?

답변 3

0

박정훈님의 프로필 이미지
박정훈
질문자

감사합니다!!!!

0

nury님의 프로필 이미지
nury
지식공유자

1. 안드로이드는 sqlite 데이터베이스를 안드로이드 OS가 접근해 사용합니다. 안드로이드 애플리케이션은 OS에게 데이터베이스 작업을 요청할 뿐 데이터베이스를 직접적으로 사용할 수 없습니다. 

또, 스마트폰 메모리는 그리 크지 않습니다. 4기가 6기가 된다고 하더라도 애플리케이션이 실행되면 OS는 애플리케이션에게 소량의 메모리만 할당합니다. 다른 프로그램도 실행해야 하니깐요. 메모리가 부족하면 더 늘어나도록 할 수는 있으나 별로 추천하는 방식은 아닙니다. 애플리케이션이 운영되다 보면 데이터베이스에 쌓은 데이터가 많아 질 수 있어 이 데이터를 모두 읽어외 메모리에 쌓아놓고 사용하는 추천하지 않습니다. 필요할 때 그때 그때 가져와 사용하는 것이 좋습니다.

2. 입력한 내용을 가지고 쿼리문을 만들어 그때 그때 가지고 오는걸 추천합니다.

3. 특정 커뮤니티나 서적은 정책상 추천해드릴 수 없음을 양해 부탁드립니다.

4. like의 경우 "ab" 대신 "%ab%" 이렇게 해서 사용하시면됩니다. 

0

박정훈님의 프로필 이미지
박정훈
질문자

추가 질문이에요.  

like  % 이런것들은 어떻게 적용하는지 궁금합니다.

String sql = "select * from mine where text like ?";

String []arg1={"ab"};
Cursor c= db.rawQuery(sql,arg1);

이런식으로 넣으면 안되던데... 따로 방법이 있을까요.
박정훈님의 프로필 이미지
박정훈

작성한 질문수

질문하기