철스토리

SugarORM - 안드로이드 DB접근을 쉽게 본문

안드로이드/유용한 라이브러리

SugarORM - 안드로이드 DB접근을 쉽게

HyunChol 2016. 9. 30. 12:47
반응형

* 참고 사이트

http://humble.tistory.com/13

http://satyan.github.io/sugar/

http://nnoco.tistory.com/136


----------------------------------------------------------------------------------------------------------------------



# Sugar ORM(Object Relation Mapping)이란?


  ORM에 대해 간략하게 소개하자면 Object Relation Mapping으로 객체와 릴레이션(RDB의 테이블)간에 매핑을 해 주는 역할을 한다. 쉽게 말하면 Book이라는 객체가 있다면 이 객체를 ORM을 통해 RDB에 삽입(Insert)하거나, 검색(Select)하거나, 삭제(Delete)하거나, 수정(Update)도 할 수 있다. 그리고 기본적인 CRUD 외에도 스키마를 다루거나 조인 연산 등 RDB의 기능을 객체지향적으로 다룰 수 있도록 도와준다.

  결과적으로 안드로이드에서 쉽게 Sqlite Database에 접근하도록 도와주는 라이브러리이다.





# Sugar ORM 사용방법


1. gradle에 추가 [ build.gradle (Module: app) ]

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


2. Manifest에 추가 [아래 밑줄부분 추가]

 - application name을 꼭 추가해 주어야 한다.

 - meta-data부분에서 DATABASE부분이 DB이름이 된다.

 - 혹시 no such table 에러가 발생하면 VERSION의 value를 기존보다 높게 하면 해결 될 수 있다.

 - PACKAGE_NAME에는 자신의 패키지 명을 적으면 된다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kkensu.www.sugarormtest">

<application
android:name="com.orm.SugarApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<meta-data android:name="DATABASE" android:value="sugar_example.db" />
<meta-data android:name="VERSION" android:value="1" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.kkensu.www.sugarormtest" />


<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


</application>

</manifest>


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

package com.kkensu.www.sugarormtest;

import com.orm.SugarRecord;

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

public Book() {
}

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


4. 실제로 사용

package com.kkensu.www.sugarormtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

for (int i=0; i<100; i++) {
Book book = new Book("Title here " + i, i +" edition");
book.save();
}

Book book2 = Book.findById(Book.class, 15);
Log.e("JHC_DEBUG", "TITLE : " + book2.title);

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

book2 = Book.findById(Book.class, 15);
Log.e("JHC_DEBUG", "TITLE : " + book2.title);

Book book5 = Book.findById(Book.class, 15);
book5.delete();

book2 = Book.findById(Book.class, 15); // 삭제 되었기 때문에 에러로 앱이 주는 현상 발생
Log.e("JHC_DEBUG", "TITLE : " + book2.title);
}
}



# 오류 해결 하는 방법 (no such table)


1. SugarRecord상속받은 클래스에 기본생성자 (public class) 생성

2. Manifest에서 VERSION 값을 수정 (값을 증가)

3. 앱을 지웠다가 다시 설치

4. Android Studio의 설정 중 Instant Run 기능 해제




반응형
Comments