'SQLite'에 해당되는 글 1건

  1. 2010.02.25 [Android] Data Storage

[Android] Data Storage

Android 2010. 2. 25. 01:08

애플리케이션에서 데이터를 저장, 가공, 표현하기 위해서 데이터 저장 메커니즘이 있다.
안드로이드 애플리케니션 또한 마찬가지로 Data Storage 메커니즘을 제공한다.

기본적으로 안드로이드 상에서, 모든 애플리케이션의 데이터는 그 애플리케이션에게 private하다.
그래서, Content Provider를 통해서 private한 데이터를 다른 애플리케이션에게 보여준다.
Content Provider는 애플리케이션 데이터에 읽기/쓰기 접근을 제공하는 컴포넌트이다. 
읽기/쓰기 접근은 그 Content Provider가 부과할 수도 있는 제약의 조건에 따른다. 그 Content Provider는 데이터를 요청하고 수정하는 것에 대한 표준 문법과, 그리고 리턴된 데이터를 읽는 것에 대한 표준 메커니즘을 구현한다. 

안드로이드는 데이터를 저장하고 가져오기 위해 다음의 네 가지 메커니즘을 제공한다.

1. Preferences
2. 파일(Local File)
3. 데이터베이스(SQLite)
4. 네트워크


Preferences 

Preference는 기본적인 데이터 타입에 대한 키와 값의 조합으로 데이터를 가져오는 가벼운 메커니즘이다. 
이는 애플리케이션이 시작될때 로드되어야 하는 기본적인 환경설정 사항들에 대한 정의로 자료형으로는 Boolean, float, int, long, String이 있다. 
이곳에 값을 읽고 쓰기 위해서는 Context.getSharedPreferences()를 호출한다. 만약 같은 애플리케이션 내의 다른 컴포넌트들에게 이것을 공유하고자 한다면, 프레퍼런스 집합에 이름을 할당하면 된다. 또한 호출하는 Activity의 private 영역에 그것을 유지하기 위해서는, 이름없이 Activity.getPreferences()를 사용한다. Content Provider를 사용하는 것에 의하지 않고서는 Preference를 공유할 수 없다.

    @Override
    protected void onCreate(Bundle state){         
       super.onCreate(state);
    
    . . .
    
       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }


Files

Mobile Device 상에 또는 분리될 수 있는 저장 매체 상에 직접적으로 파일들을 저장할 수 있다. 
기본적으로 다른 애플리케이션들은 이러한 파일들에 접근할 수 없다.
만약 컴파일 시점에 애플리케이션과 함께 패키지할 정적(static) 파일을 가지고 있다면, 프로젝트의 res/raw/myDataFile로 
그 파일을 저장할 수 있으며, 그리고 나서 Resources.openRawResource(R.raw.myDataFile)를 사용해서 그것을 열수 있다. 그것은 파일로로부터 읽기 위해 사용할 수 있는 InputStream 오브젝트를 리턴한다.


Databases

안드로이드 API는 SQLite 데이터베이스를 지원한다. 각각의 데이터베이스는 그것을 생성한 애플리케이션에게 private하다.
SQLiteDatabase 오브젝트는 데이터베이스를 나타내고, 그것과 상호작용하는 메소드들을 가지고 있다. 데이터베이스를 생성하기 위해서는 SQLiteDatabase.create()를 호출하고, 또한 서브클래스 SQLiteOpenHelper를 호출한다.
SQLite 데이터베이스 시스템을 위한 지원의 일부로써, 안드로이드는 데이터베이스 관리 기능을 제공한다. 그것은 유용한 오브젝트들로 감싸진 복잡한 데이터 집합들을 저장하게 한다. 예를 들어 안드로이드는 contact 정보에 대한 데이터 타입을 정의한다. 그것은 성과 이름(문자열), 주소와 전화번호(또한 문자열), 사진(비트맵 이미지), 그리고 사람을 설명하는 다른 많은 정보를 포함하는 많은 필드들로 구성되어 있다.
안드로이드는 테이블 컨텐츠를 브라우즈하고, SQL 명령어를 실행하고, 그리고 SQL 데이터베이스의 다른 유용한 기능을 수행하는 것을 가능하게 하는 sqlite3 데이터베이스 도구를 함께 배포하고 있다.
모든 데이터베이스(SQLite와 그 밖의 것들)는 디바이스 상의 /data/data/package_name/databases 안에 저장된다.
그리고, 레코드에 대한 고유한 ID로 사용될 수 있는 자동증가 키값 필드(autoincrement value key field)를 포함할 것을 권장한다. 이것은 정적(private) 데이터를 위해서는 요구되지 않지만, 만약 컨텐트 프로바이더를 구현한다면, 그러한 고유한 ID 필드를 포함해야 한다. 


Network 

데이터를 저장하고 가져오기 위해 네트워크를 사용할 수 있다. 
네트워크 오퍼레이션을 하기 위해서는, 다음의 패키지에 있는 클래스를 사용한다.

java.net.*
android.net.*



Posted by finewoo
,