2 분 소요

이번 포스팅에서는 일정과 연락처의 데이터베이스 설계 및 구축을 해볼예정입니다.

안드로이드 스튜디오에서 제공하는 SQLite를 이용하여 로컬DB를 만들어보겠습니다.

데이터베이스 설계

다이어리 앱에 필요한 데이터베이스는 2가지입니다.

  1. 일정 데이터를 담을 데이터베이스
  2. 연락처 데이터를 담을 데이터베이스

일정 데이터베이스

일정 데이터베이스의 이름은 Diary.db 입니다.

테이블의 구상은 간단하게 다음과 같이 만들어보겠습니다.

image

테이블명 : DIARY

테이블의 속성 : title(제목) content(글내용)

title과 content는 TEXT 형식이며 생략되어서는 안되며 title은 Primary Key로 지정했습니다.

DBHelper.java 코드

package com.example.mydiary;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DBHelper extends SQLiteOpenHelper {

    final static String DB_NAME = "Diary.db";  //DB이름
    final static int DB_VERSION = 2; //DB버전


    //생성자
    public DBHelper(@Nullable Context context) {
        super(context, DB_NAME,null,DB_VERSION);
    }

    //최초 1회 실행
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        //테이블 구조
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS DIARY(title TEXT PRIMARY KEY NOT NULL,content TEXT NOT NULL)");

        //기초데이터 삽입
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('1일차','안녕하세요')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('2일차','제이름은')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('3일차글은 제목이 매우매우매우매우매우 깁니다.','홍길동입니다.')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('4일차','콜라')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('5일차','사이다')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('6일차','웰치스')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('7일차','밀키스')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('8일차','파인애플')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO DIARY(title, content) VALUES('9일차','사과')");

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS DIARY");
        onCreate(sqLiteDatabase);
    }
}

CREATE TABLE IF NOT EXISTS 문은 동일한 테이블명이 없을 때 테이블을 생성하는 SQL문입니다.

연습삼아 기초데이터를 몇개 삽입해놓았습니다.

데이터의 삽입은 INSERT 문을 사용하여 할 수 있습니다.

연락처 데이터베이스

연락처 데이터베이스의 이름은 PhoneBook.db 이며 일정 데이터베이스와 거의 동일합니다.

image

테이블명 : PHONEBOOK

테이블의 속성 : name(이름) phonenum(전화번호)

name과 phonenum는 TEXT 형식이며 생략되어서는 안되며 name은 Primary Key로 지정했습니다.

DBHelper1.java 코드

package com.example.mydiary;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DBHelper1 extends SQLiteOpenHelper {

    final static String DB_NAME = "PhoneBook.db";  //DB이름
    final static int DB_VERSION = 2; //DB버전


    //생성자
    public DBHelper1(@Nullable Context context) {
        super(context, DB_NAME,null,DB_VERSION);
    }
    
    //최초 1회 실행
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        //테이블 구조
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS PHONEBOOK(name TEXT PRIMARY KEY,phonenum TEXT NOT NULL)");

        //기초데이터 삽입
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('홍길동','01012345678')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('김유신','01023456789')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('이주현','01011112222')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('손흥민','01051511515')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('하정우','01012127431')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('이정희','01084022857')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('하채원','01003460023')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('김재동','01094753389')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('유재석','01017879815')");
        sqLiteDatabase.execSQL("INSERT OR IGNORE INTO PHONEBOOK(name, phonenum) VALUES('박명수','01086334788')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS PHONEBOOK");
        onCreate(sqLiteDatabase);
    }

}

댓글남기기