2018-2학기/모바일 응용

[Mobile] SqLite 1

꿈꾸는어린이 2018. 9. 17. 11:54

//

2018.09.10

모바일 응용 chap1. DB 테이블 설계

//

DB 사용

  • 기본키 id : _id(언더바 추가), 반드시 추가

  • SqLite helper는 한번 생성되면 계속 호출됨, 필요할때마다 helper 클래스의 객체를 생성하면 된다.

  • onCreate도 매번 생성되는게 아니라 디비를 가져오는 작업을 최초로 수행했을 때 딱 한번만 수행됨.

  • 디비 파일과 테이블은 처음 어플 설치했을 때만 생성됨. -> 수정되면 다시 어플 삭제하고 재설치

  • insert,update,delete -> getWritableDatabase()

  • select -> getReadableDatabase() -> query()

    1. sql를 직접 쓰는 방법 : execSQL(), rawQuery()

    2. 메소드를 이용하여 쓰는 방법 : myDB.insert(), myDB.update().....

    ★ 가능하면 2메소드를 이용하여 쓰는 방법이 좋다!!! -> 다른 기능과 호환이 좋음, 숫자타입의 반환값이 있어서 잘 수행되었는지 체크할 수 있다(1방법은 반환값이 없음,,)

  • rawQuery 는 커서를 반환하기 때문에 사용하였을 경우 Cursor.close()

  • 디비 닫을 때는 helper.close()

컨트롤 + q 눌러서 메소드 설명볼 수 있다

insert

  • 컬럼 순서 틀리면 안된다.

  • 문자열은 ' '로 묶어준다.

  • db.insert()

    • 0반환 -> 레코드가 안들어갔다, 레코드가 들어가면 1이상의 값 반환


select

  • 모든 컬럼을 다 가져오고 싶을 때 null

  • cursor은 결과의 앞쪽을 가리킴. 그래서 moveToNext() 해야 그 항목을 가리키게 된다.

  • 가능하면 while문을 사용하여 시작과 끝을 확실히

  • getString(1) 인덱스, 테이블의 크기가 복잡하고 커질 때는 실수하기 쉬우므로 가능하면 지양,

    cursor.getString(cursor.getColumnIndex(ContactDBHelper.COL_NAME)) 이라고 써주는 게 낫다.

    (강의자료 18페이지)

  • Dto 클래스 객체를 사용하여 각 항목을 묶어서 저장할 수 있다. dto는 디자인 패턴의 일종. 이러한 문제가 발생했을 때 이런 클래스를 쓰자 라고 제안, Data Transfer Object = VO (Value Object)

    dto를 관리할 객체나 리스트가 필요, 결과 항목 하나가 dto 하나에 저장되는 것

  • select * from table_name where name like '김%'

    select * from table_name where name like '%나%'

R 문제 생겼을 때 -> rebuild project


실습

  1. InsertContactActivity 완성

  2. SearchContactActivity 완성


'2018-2학기 > 모바일 응용' 카테고리의 다른 글

[Mobile] Notification & Broadcast  (0) 2018.10.24
모바일 응용_ 프로젝트 기획  (0) 2018.10.12
[Mobile] AsyncTask  (0) 2018.10.11
[Mobile] Preference, Network, Thread  (0) 2018.10.11
[Mobile] SqLite2  (0) 2018.10.01