이번엔 SQLiteDatabase class를 보도록하겠습니다..
뭐.. 별거 없다고 말하기는 그렇고.. 그렇다고 뭐 있다고 하기도 그렇네요..
일단 우리가 정의했던 Helper class형 변수를 선언해주고..
SQLiteDatabase형 변수에 아래처럼 db를 할당(?)해줍니다..
db를 읽기(select)만 하겠다면 getReadableDatabase를 사용해도 될꺼에욤..
[code java] ProductHelper pHelper = new ProductHelper(MyCursorBinding.this, "Product.db", null, 1); SQLiteDatabase db = pHelper.getWritableDatabase(); [/code]
일단 SQLiteDatabase class에서 실제로 table을 만지작거리는 method는
insert(), update(), delete(), execSQL(), query(), rawQuery() 정도가 될것 같습니다..
insert, update, delete는 안봐도 비됴...겠죠..
execSQL은 insert, update, delete, create table, alter table... 등 우리가 일반적으로 사용하는 sql구문을 이용해 데이터작업(??)을 할 수 있습니다.
query(), rawQuery() 는 조회(select)할때 사용한다.. 뭐 그렇게 보심될듯 합니다..
두 method의 차이라면.. rawQuery()는 일반적인 조회 sql구문을 이용할 수 있고, query()는 입력받는 파라미터만 9개!!! 그냥 저는 rawQuery()를 씁니다.. ㅜ.ㅜ
먼저 insert, update, delete부터 보도록 하겠습니다..
흠.. insert, update method를 사용하기 위해서 먼저 알아야 할게 ContentValues군요..
ContentValues는 insert, update대상 테이블의 column명과 값을 mapping시켜준다.. 뭐.. 그렇게 아시면 되겠습니다.. 아래처럼 말이죠..ㅎㅎ
해당 table의 컬럼명과 값을 맵핑시켜주는 것이니 dataType도 table column의 그것과 같게 해줍니다.
[code java] //ContentValues형 변수를 선언합니다 ContentValues cv = new ContentValues(); // put method를 이용해 컬럼명, 값을 저장(?)합니다. cv.put("name", nameET.getText().toString()); cv.put("price", Integer.parseInt(priceET.getText().toString())); db.insert("product", null, cv); [/code]
insert(테이블명, String nullColumnHack, ContentValue) method입니다.. 두번째 파라미터는 뭔지 잘 모르겠어요.. 뭔지 모르니 그냥 null값으로 주자구요..
이걸 execSQL()을 이용해서 만든다면..
[code java] String sql = "insert into product values (null, '"+ nameET.getText().toString()+"', "+ Integer.parseInt(priceET.getText().toString()+");"; db.execSQL(sql); [/code]이렇게 되겠습니다.. 뭐.. 대충 아시리라..ㅎㅎ -.-;;;
update는 update(테이블명, ContentValues, Where절, String[] whereArgs) 입니다..
where절 조건에 맞는 대상을 contentvalues로 업뎃합니다..
Where절에는 "name = '"+nameET.getText().toString()+"'" 요런식으로 해주면 될 듯 하구요..
세번째 파라미터는 그냥 null합시다.. ㅠ.ㅠ
[code java] ContentValues cv = new ContentValues(); cv.put("name", nameET.getText().toString()); cv.put("price", Integer.parseInt(priceET.getText().toString())); db.update("product", cv, "name= '"+selectedName+"'", null); [/code]이런식이겠죠.. execSQL은 따로 설명 안드려도 아시리라 생각됩니다.. 여러분은 똘똘하시잖아열.. ㅎㅎ
delete는 delete(테이블명, where구문, String[] whereArgs)입니다.
삭제하는거니 ContentValues는 필요없구요.. 테이블명이랑 where구문만 있음 되겠네요.. where구문을 null로 주면..대략 난감해지는 상황도.. 이것도 세번째 파라미터는 null하자구요.. ㅠ.ㅠ
흠냥... query랑 rawQuery, Cursor는 다음에..
이번엔 query()랑 rawQuery, Cursor를 알아보겠습니다...
query(), rawQuery()의 리턴받는 데이터 타입이 Cursor형입니다..
select의 결과 데이터가 많을 수 있어서 그 결과를 몽땅 리턴하지 않고 결과위치를 알려주는 마치 포인터처럼 Cursor를 돌려주게 된다네요..
Cursor에는 다양한 method가 있는데.. 전부다 살펴보기 보담은 지극히 주관적으로.. 자주 사용될것들만 몇개 살펴보면.. getColumnName()->컬럼명을 얻을 수 있구요.. getCount()->결과 레코드 수를 돌려받습니다.. getInt(int index), getString 등.. 해당컬럼index의 값을 가져옵니다..
moveToFirst, moveToNext, moveToPosition 등... 특정 레코드 위치로 이동하는 method들 입니다..
query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy, String limit)
파라미터가 많기도 하군요.. 명시할 필요없는 파라미터는 null로 해주시면 될꺼에요..
rawQuery (String sql, String[] selectionArgs) 간단하네요.. ㅎㅎ
저는 개인적으로 sql문 만드는게 편하니 rawQuery를 많이 쓸것 같습니다.. 두번째 파라미터는 그냥 null하자구요..
[code java] cr = db.rawQuery("select _id, name, price from product", null); while(cr.moveToNext){ //while구문 돌려서 화면에 뿌리거나 배열에 담거나 하겠죠.. String name = cr.getString(1); int price = cr.getInt(2); } [/code] 이상 허접한 SQLiteDatabase, Cursor, ContentValues 설명이었습니다. 다음은 SimpleCursorAdapter에 대해 정리를 해보겠습니다.. 어디까지나.. 개인적으로 학습하면서 이해한 수준으로 정리하는 것인지라.
'프로그래밍 정리 > 안드로이드' 카테고리의 다른 글
[안드로이드] SQLite데이터베이스 이용하기 (0) | 2012.07.06 |
---|---|
Database 사용해 보기 1 [SQLiteOpenHelper] (0) | 2012.07.06 |
모바일정보(네트워크, 맥어드레스, 커널버전 등등.. 모바일 정보 가져오기) (0) | 2012.06.25 |
위젯 Refresh (0) | 2012.06.25 |
apk 인스톨 소스 (0) | 2012.06.25 |