본문 바로가기

Android

[안드로이드]sugar orm 사용하기


sugar orm 이란?

 ORM에 대해 간략하게 소개하자면 Object Relational Mapping으로 객체와 릴레이션(RDB의 테이블)간에 매핑을 해 주는 역할을 합니다. 쉽게 말하자면 Book 이라는 객체가 있다면 이 객체를 ORM을 통해 RDB에 넣거나(Insert), 가져오거나(Select), 지우거나(Delete), 고칠 수(Update)도 있고, 기본적인 CRUD 외에도 스키마를 다루거나 조인 연산등 RDB의 기능을 객체지향적으로 다룰 수 있도록 도와줍니다.

-Object Relational Mapping의약자

-객체를통해서DB를다루는것이목적

■SugarORM

-안드로이드에서ORM을사용하기위해만들어진라이브러리

-SQLite DataBase와의상호작용을더손쉽게만들어줌


sugar orm 사용법

1. gradle을 추가한다.

Gradle:

compile 'com.github.satyan:sugar:1.4'


2. Manifest에 추가한다.

AndroidManifest.xml

<application android:label="@string/app_name" android:icon="@drawable/icon"
android:name="com.orm.SugarApp">
.
.
<meta-data android:name="DATABASE" android:value="sugar_example.db" />
<meta-data android:name="VERSION" android:value="2" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example" />
.
.
</application>


*

오류가 발생해서 한동안 애먹었다.

 android:name="com.orm.SugarApp" 을 빼먹지말자!

sugar_example.db : 파일로 저장될 db파일의 이름이다. 하고싶은 이름으로 수정해도 된다.

android:value="2" : 혹시 오류가 나면 높은 값(예를들어 20) 으로 바꾸면 될 수 도 있음...

<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example" />

com.example 에 본인의 app이름을 넣을 것!


3. SugarRecord를 상속받은 클래스를 생성한다.

public class Book extends SugarRecord {
  String title;
  String edition;

  public Book(){
  }

  public Book(String title, String edition){
    this.title = title;
    this.edition = edition;
  }
}

* 기본 생성자를 생성하지 않으면 오류가 발생한다고 한다.


제공하는 메서드

- save : db에 저장한다.

- delete : 삭제

- findById : 레코드 검색


-사용 예

Save Entity:

Book book = new Book("Title here", "2nd edition")
book.save();

Load Entity:

Book book = Book.findById(Book.class, 1);

Update Entity:

Book book = Book.findById(Book.class, 1);
book.title = "updated title here"; // modify the values
book.edition = "3rd edition";
book.save(); // updates the previous entry with new values.

Delete Entity:

Book book = Book.findById(Book.class, 1);
book.delete();

Bulk Operations:

List<Book> books = Book.listAll(Book.class);

Book.deleteAll(Book.class);


오류...

no such table 오류

=> 1. public 기본생성자를 만들것

   2. Manifest에서 VERSION 값을 수정해볼것

   3. 앱을 지웠다가 다시 해볼것


만들어진 디비 확인하기

SQLite를 이용하여 DB 를 생성하게되면 보통 "  data/data/패키지명/databases/저장한DB이름.db " 경로로 파일이 저장된다.

하지만 data 폴더는 퍼미션이 제한되어있어 일반 비루팅 디바이스로는 접근할수 없다.

그래서 루팅이 되지 않은 디바이스에선 DB를 이용한 App 테스트 중엔 직접적인 db 데이터를 확인 할 수 있는 방법이 없다.

퍼미션으로 인해 data 폴더 접근이 불가능하므로 , 접근 가능한 폴더로 db 저장 경로를 변경해주면 된다.

Ex)

mDBHelper = new DatabaseHelper(mContext,"/mnt/sdcard/" + DB_NAME, null, DATABASE_VERSION);


/mnt/sdcard/ 처럼 퍼미션이 있는 폴더 경로를 추가해주면 해당 경로의 폴더안에 DB가 생성된다.

그러면 직접 접근하여, 파일 데이터 확인이 가능하다 !!


또다른방법들...

방법1
sdcard가 mount된 avd 작동시키시고 
Eclipse -> DDMS  -> File Exploer

방법2
sdcard가 mount된 avd 작동시키시고 
adb shell
#cd data
#cd data
#cd com.bopduk.BopMusic
#cd database
#ls -l
BOPMUSIC_DB.db
이렇게 자신의 패키지 경로명 주면 됨

방법3
소스코드로 확인할려면
 String     DB_NAME = "BOPMUSIC_DB";
 String dbPath=getApplicationContext().getDatabasePath(DB_NAME).getPath();
       Log.i("my db path=", ""+dbPath);
 File f=new File(dbPath);

if(f.canRead())
         Log.i("DB", "DB를 읽을수 있다");

테이블 확인 
SQLite Database Browser2.0설치하시고
eclipse로 db파일 바탕화면으로 복사하고 위 프로그램으로 보시면됨.