안드로이드 SQLite 2편이다.


1편은 아래의 링크로 가면 된다.


http://mommoo.tistory.com/20


1편에서는 SQLite를 쓰기위한 준비사항 과 개념에


관하여 다루었다.


이번 포스팅은 직접 사용 해볼 것이다.


내가 필요한 Column은 id와 pass 값이다.


테이블의 이름은 Info 로 할것이다.


해당 테이블을 만들기 위해


아래와 같이 코딩한다.


public class MommooDB extends SQLiteOpenHelper {
public MommooDB(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE Info"+"(id Text primary key, pass Text);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
onCreate(db);
}
}


Info라는 db파일을 처음 접근할때 onCreate 메서드가 실행되고,


그 결과로 Info 테이블이 생성 될 것이다.


해당 쿼리문은 id 와 pass 를 문자열로 저장하고 id를 primary key로 지정하는 쿼리문이다.


사용하는 방법은 아래와 같다. 간단하게 insert 와 select를 해볼 것 이다.


ex ) insert



MommooDB mommooDB = new MommooDB(this,"Info",null,1);
SQLiteDatabase database = mommooDB.getWritableDatabase();
String id = "Mommoo";
String pass = "mm";
String sql = "insert into Info values('"+id+"','"+pass+"')";
database.execSQL(sql);



혹시, 버전을 바꾸고 싶으면 생성자안 4번째 인자만 바꿔주면 된다. ( 버전은 1이상만 가능)


ex) select


select를 할때는 일반적으로 아래와 같이 커서 클래스를 쓴다. 


MommooDB mommooDB = new MommooDB(this,"Info",null,1);
SQLiteDatabase database = mommooDB.getReadableDatabase();
String sql = "select * from Info where id='Mommoo'";
Cursor cursor = database.rawQuery(sql,null);
while(cursor.moveToNext()){
String id = cursor.getString(0);
String pass = cursor.getString(1);
}


cursor.moveToNext() 메서드를 통해, 테이블의 튜플 갯수만큼 루프를 돈다.


상황에 맞게 코딩하면 되겠다.





insert문은 mommooDB.getWritableDatabase(); 를 사용했고 select 문은 mommooDB.getReadableDatabase(); 를 사용했는데,


메서드명 에서도 알 수 있드시, 쓰기모드 읽기모드 이다. insert는 db값을 입력시켜야 하므로 쓰기모드를 사용했고,


select는 디비 튜플값만 불러오면 되므로 읽기모드를 사용한것이다.


위와같이 데이터베이스를 사요한 후 에는 꼭 아래와 같이 close를 해준다.



mommooDB.close();
database.close();
cursor.close();



포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee




  안드로이드 UI의 상태나 가벼운 정보등은 SharedPreference(이하 S.P로 칭한다.)를 사용한다. 


db와 달리 번거롭지않고 사용하기 간편하기 때문이다. 


하지만 단점이 있다. xml형태로 저장하므로, 데이터 누적이 많아 지면 DB에 비해 성능이 떨어진다.


성능이 떨어지는 이유는 당연 인덱싱 문제가 아닐까 싶다. db같은 경우는 query로 손쉽게 원하는 데이터를 뽑아와


작업하지만, S.P 방식은 데이터 전부를 뽑아와 key값을 하나 하나 비교하기 떄문이라고 생각한다.


즉, 사용목적에 따라 두가지 기능(S.P , DB)을 적절히 사용 할 필요가 있겠다.


이번 포스팅은 db를 사용 할 것이다. 안드로이드는 SQLite이라는 내부 db를 제공해준다.


기본적인 셋팅은 아래와 같다.


public class MommooDB extends SQLiteOpenHelper {
public MommooDB(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {

}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
onCreate(db);
}

} 


SQLiteOpenHelper클래스를 상속받은 자신의 클래스를 만든다.


필수적으로 부모생성자와, onCreate, onUpgrade 이렇게 3가지를 적어줘야 한다.


필수 부모 생성자로 Context, 디비명, 커서, 버전을 아규먼트로 넘겨줘야한다.


여기서 Context는 안드로이드의 Context정보를 의마하고, 디비명은 자신의 데이터베이스 파일명을 의미한다.


커서는 db데이터를 다룰 때 쓰는데, 


자신의 만든 커스텀 커서가 있을경우 선언해주고 기본 커서를 사용할 경우는 null로 해준다.


마지막 매개변수는 버전이다. 같은 디비명이라도 버전이 틀리면 다른 디비로 간주 할 수 있다.


onCreate메서드는 혹, 자신이 호출하는 db명이 없는 경우 호출된다. 즉 새로운 디비를 만들때 


CREATE DB명 느낌보다는, db이름을  생성자에의 아규먼트로 넣어 실행했을 경우에


db명이 없을경우 onCreate메서드가 호출되고, db명이 있는경우는 호출하지 않는다.


따라서 db안의 table을 onCreate안에다가 관리하면 편하다.


onUpgrade메서드는 db명은 있지만 버전이 다른 경우에 호출돤다. 


즉 자신이 만든 db에 새로운 table을 추가한다거나


삭제같은 경우가 있을때, 자신의 디비의 버전을 올려주고 메서드 안에다가 새로운 작업을 하면 되겠다.


필자 같은 경우에 필요한 DB 정보는 id와 pass 데이터다. id와 pass 칼럼을 가지는 테이블을 작성해보겠다.


다음 포스팅때 마저 하겠다.




포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts