[ Android Studio ] #20. ToDoList 어플을 만들어보자 - Database 연결 (1)

ma.caron_g·2022년 2월 4일
0
post-thumbnail

< 참고 링크 >

[ Database 클래스 생성 ]

/app/java/com.study.todolistNoteDatabase클래스를 생성합니다.

그 후 NoteDatabase클래스에 아래 코드를 입력해줍니다.

public class NoteDatabase {
    private static final String TAG = "NoteDatabase";

    //데이터베이스에 대한 객체 선언.
    private static NoteDatabase database;
    public static String DATABASE_NAME = "todo.db";
    public static String TABLE_NOTE = "NOTE";
    public static int DATABASE_VERSION = 1;

    private Context context;
    private SQLiteDatabase db;


    private NoteDatabase(Context context){
        this.context = context;
    }
  
    private static NoteDatabase getInstance(Context context) {
        if(database == null){
            database = new NoteDatabase(context);
        }

        return database;
    }

    //리스트를 화면에 표실할 때 현재 위치 및 이동을 나타내는 메서드를 나타냄.
    public Cursor rawQuery(String SQL) {
        Cursor c1 = null;
        try {
            c1 = db.rawQuery(SQL,null);
        }
        catch (Exception ex) {
            Log.e(TAG, "Exception in rawQuery",ex);
        }

        return c1;

    }

    //테이블을 만들고 데이터베이스를 만들어 추가하고 삭제할 때 만든 SQL문을 실행하기 위해 정의.
    public boolean execSQL(String SQL){
        try {
            Log.d(TAG, "SQL : " + SQL);
        }
        catch (Exception ex){
            Log.e(TAG, "Exception in rawQuery", ex);
            return false;
        }
       
        return true;
    }
}

[ Database 작성 순서 ]

앞에 데이터베이스 게시글에서 데이터베이스가 만들어지는 순서를 배웠습니다.

  1. 데이터베이스 만들기
  2. 테이블 만들기
  3. 레코드 추가하기
  4. 데이터 조회하기

[ 1. 데이터베이스 만들기 ]

 public boolean open() {
        dbHelper = new DragStartHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        db = dbHelper.getWriteDatabase();

        return true;
    }

    public void close(){
        db.close();
        database = null;
    }

오류가 발생하는데 다음 코드를 작성하면서 오류를 제거해줄 것이다.

우선 아래 코드를 추가한다.

private class DatabaseHelper extends SQLiteOpenHelper {
    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
}

그 후 저번처럼 빨간줄이 뜬 클래스에 커서를 갖다대고 implement methods를 하여 메서드를 추가한다.

OK를 누르면 아래와 같은 코드가 추가되는데 매개변수명이 다를 것이다.
아래 사진과 같이 매개변수명을 변경해줍니다.

 @Override
        public void onCreate(SQLiteDatabase db) {
            String DROP_SQL = "drop table if exists " + TABLE_NOTE;

            try {
                db.execSQL(DROP_SQL);
            }
            catch (Exception ex) {
                Log.e(TAG, "Exception in DROP_SQL", ex);
            }

            String CREATE_SQL = "create table " + TABLE_NOTE + " ("
                    + "_id integer NOT NULL PRIMARY KEY AUTOINCREMENT, "
                    + " TODO TEXT DEFAULT '' "
                    + ")";

            try {
                db.execSQL(CREATE_SQL);
            }
            catch (Exception ex) {
                Log.e(TAG, "Exception in CREATE_SQL", ex);
            }

            String CREAT_INDEX_SQL = "create index " + TABLE_NOTE + "_IDX ON " + TABLE_NOTE + " ("
                    + "_id"
                    + ")";

            try {
                db.execSQL(CREAT_INDEX_SQL);
            }
            catch (Exception ex){
                Log.e(TAG, "Exception in CREATE_INDEX_SQL", ex);
            }
        }

이후 데이터베이스를 이용하면서 DatabaseHelper가 생성이 되면 DROP_SQL을 통해 이전에 존재하는 테이블들을 싹 밀어버립니다.

그리고 CREATE_SQL을 통해 테이블을 만들어주고 CREATE_INDEX_SQL을 이용해 테이블 별로 index를 만들어줍니다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글