5주차!
이제 1주 밖에 남지 않았네요... 😭
이번주 프로젝트는 SQLite를 이용하여 내부DB를 구현하는 것이었어요!
이번에는 처음 해 보는 내용이 많이 있어서, 강의를 듣고 프로젝트를 진행하면서 배우고 공부 한 내용을 정리 하는 방식으로 후기를 남겨보려고 해요!
내부 DB
자동로그인 또는 토큰 저장 등을 할 때, 우리는 보통 sharedPreference 라는 저장소를 이용했습니다!
그러나 sharedPreference 는 key - value 한 쌍으로만 관리하기 때문에, 데이터가 커지면서 데이터베이스가 필요하게 되었습니다.
파일에 저장하는 방식도 많이 사용합니다.
but! 인덱싱이라는 것을 이용하여, 모든 데이터를 로딩 할 필요가 없이 필요한 데이터만 가져와서 쓰는 데이터베이스 를 사용하게 됩니다.
데이터베이스를 사용하기 위해서는 4개의 단계가 필요합니다!
1. 데이터베이스 오픈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public void oepnDatabase(){ //데이터베이스 저장소 만들기 //데이터베이스 이름, 모드 database = openOrCreateDatabase("songDB", MODE_PRIVATE, null); if(database != null){ Log.e("데이터베이스 오픈", "데이터베이스 오픈"); } //데이터베이스를 열어주고! 테이블을 열어야함. // SQL를 실행 할 때는 이전에 먼저 데이터베이스를 열어 주어야 함. // 앱을 실행 할 때 마다, openDatabase 해 주기! createTable(); } | cs |
2. 테이블 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public void createTable(){ String tableName = "test03Table"; //데이터베이스가 존재하는지 확인 if(database != null){ //[IF NOT EXISTS] : 중복된 테이블 생성 에러 방지 String sql = "create table if not exists "+ tableName + "(_id integer PRIMARY KEY autoincrement, name text, age integer, mobile text)"; //결과 값이 필요하지 않은 sql문의경우 execSQL database.execSQL(sql); Log.e("createTable","데이터베이스 테이블 생성 완료"); insertData(); }else Log.e("createTable","데이터베이스 오픈"); } | cs |
3. 데이터 삽입
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public void insertData(){ String name = "승희"; String mobile = "010-8615-9140"; String ageStr = "20"; int age = -1; try{ age = Integer.parseInt(ageStr); }catch (Exception e){ //ageStr 이 숫자가 아닌데 형번환을 시킬 경우 exception이 발생 } Log.e("insertData", "insertData호출"); if (database != null){ String sql = "insert into test03Table(name, age, mobile) values(?,?,?)"; Object[] params = {name, age, mobile}; database.execSQL(sql,params); Log.e("insertData", "데이터 삽입 완료!"); selectData(); } } | cs |
4. 데이터 조회
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public void selectData(){ if (database != null){ String sql = "select name, age, mobile from "+ "test03Table"; //sql에 ?를 넣고 null 대신 ?를 대체 할 파라미터를 넣는 방법도 가능! Cursor cursor = database.rawQuery(sql, null); Log.e("조회된 데이터 개수 : " , String.valueOf(cursor.getCount())); for(int i = 0; i<cursor.getCount();i++){ cursor.moveToNext(); String name = cursor.getString(0); int age = cursor.getInt(1); String mobile = cursor.getString(2); Log.e("selectData", name + age + mobile); } } } | cs |
Helper Class (헬퍼 클래스)
헬퍼 클래스
- 기능 수정을 해야 할 경우, (가령 칼럼추가!) 테이블을 삭제 해 버리면 이전 데이터가 사라져 버리는 문제가 발생 하게 됩니다.
- 업그레이드 또는 새로 만들어야 하는 경우, OpenHelper를 사용하면 기존 데이터는 유지한 채, 업데이트가 가능 합니다.
후기
확실히 부스트코스를 진행하면서, 코드 하나를 짜더라도 조금 더 깔끔하고 효율성 있는 코드를 만들기 위해 많은 고민을 했던 것 같아요!.. 네트워크 부분부터 코드가 매우.. 많이.. ㅜㅜ...! 정돈이 안된 느낌이 들어서.. 얼른 프로젝트를 마무리하고, 부족한 부분을 다시 채워가면서 코드 리펙토링을 진행하고싶어요...ㅎ... 열심히 한다고 했는데, 아직은 너무나도 부족하고 빈틈이 많은 것 같아요..ㅠㅠ
마지막 프로젝트까지 잘 마무리 할 수 있었으면 좋겠습니다👍!
'안드로이드 > 부스트 코스 에이스' 카테고리의 다른 글
[부스트코스ACE 2기] 6주차 마지막 프로젝트 후기 (0) | 2019.09.19 |
---|---|
[부스트코스ACE 2기] 4주차 프로젝트 후기 (0) | 2019.09.06 |
[부스트코스ACE 2기] 3주차 프로젝트 후기 (0) | 2019.08.29 |
[부스트코스ACE 2기] 2주차 프로젝트 후기 (0) | 2019.08.22 |
[부스트코스ACE 2기] 1주차 프로젝트 후기 (0) | 2019.08.07 |