< 참고 링크 >
/app/java/com.study.todolist에 NoteDatabase클래스를 생성합니다.
그 후 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; } }
앞에 데이터베이스 게시글에서 데이터베이스가 만들어지는 순서를 배웠습니다.
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를 만들어줍니다.