'안드로이드'에 해당되는 글 5건

안드로이드에서 SQLite사용

토리's의 세상사/알아둘것 기록.

안드로이드 앱을 개발하며 DB를 사용하게 되었는데 수많은 시행착오를 겪게 되었다, 
이글을 읽는 사람들은 적어도 나바다는 적은 고생을 하기를 바라며 ...

자. 그럼 안드로이드에서 SQLite를 사용하는 방법에대하여 알아보도록 하자.
DB생성예제

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class MainActivity extends SherlockActivity {
	private SQLiteDatabase db;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//db생성 혹은 열기
		db = openOrCreateDatabase("plan",MODE_PRIVATE, null);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getSupportMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

여기서 주목할 것 은 openOrCreateDatabase("생성할 데이터베이스 이름","모드",null) 메서드이다.
영어를 그대로 해석해보면 "열기 혹은 생성" 인데 데이터베이스가 없을경우 생성, 있으면 여는 메서드다.
이 메서드의 인수는 3개로 첫번째인수는 생성하거나 열 데이터베이스의 이름을 뜻하고.

두번째 인수는 데이터베이스의 모드를 뜻하는데 
MODE_PRIVATE 는 해당어플리케이션만 사용 할 수 있다는 뜻이다.
즉 다른 어플리케이션에서도 이 데이터베이스에대한 접근을 허용하겠냐는 이야기다.

3번째 인수는 null로 해놓았는데 필자도 잘모른다. 다만 사용상의 문제는 없다.


테이블 생성 예제

        //테이블 생성 혹은 열기
        //db.execSQL("DROP TABLE plans");
        String sql = "CREATE TABLE IF NOT EXISTS "+"plans"+" ("
        		+"_id integer PRIMARY KEY autoincrement, "
        		+"_date integer NOT NULL, "
        		+"_list text NOT NULL, "
        		+"_weather integer, "
        		+"UNIQUE(_date));";
        db.execSQL(sql);

여기서 볼 수 있듯이 "execSQL" 메소드를 이용하여 질의문을 실행 시킬 수 있습니다.
다만 
execSQL는 생성,삭제등 결과값이 필요 없는 경우에만 사용하며 특정 테이블을 조회한다 따위의 반환값이 필요한 작업의 경우
rawQuery 메소드를 이용해야한다.

위의 예제에서는 
execSQL() 메서드를 이용해 테이블을 생성하는 질의문을 써놓았다.
사용된 질의문을 분석해보면 이렇다. 

CREATE TABLE IF NOT EXISTS -> 테이블을 생성한다 만약 존재하지 않을 경우
해당하는 이름의 테이블이 존재하지 않는 경우에만 테이블을 생성한다는 구문이다.
plans ->생성할 테이블의 이름이다. 여기서는 plans 라고 되어있지만 원하는 이름으로 바꾸어 쓰면된다.

integer -> 정수값이라는 의미 Type text -> 문자열 값이라는 의미 Type PRIMARY ->유일키 라는 것(중복이 허용되지 않는 값) 테이블당 1개의 유일키를 가질 수 있다. UNIQUE() -> 중복이 허용되지 않게 한다는 것 에서 PRIMARY키와 비슷하지만 이것은 여러개의 필드를 지정 할 수있다. 아까 말했듯이. PRIMARY키는 하나의 필드만 지정할 수 있다.

rawQuery와 Cuser를 이용한 데이터베이스 조회예제

Cursor cursor = db.rawQuery("SELECT * FROM plans ORDER BY _date DESC LIMIT 0, 31", null);
	while(cursor.moveToNext()){
	      String date = cursor.getString(1);
	      String worklist = cursor.getString(2);
	      Log.i("날짜 :",date);
	}
	cursor.close();



간단간단하게 예제 3개로 설명을 마친다.
기회가 있을 경우 조금더 이해가 쉽게 세부적으로 들어가보려한다만..

아마 귀찮아서 안할 것...

Name
Password
Homepage
Secret