[Android] 나만의 다이어리 앱 만들기 프로젝트6
이번 포스팅에서는 일정과 연락처의 데이터베이스 설계 및 구축을 해볼예정입니다.
안드로이드 스튜디오에서 제공하는 SQLite를 이용하여 로컬DB를 만들어보겠습니다.
데이터베이스 설계
다이어리 앱에 필요한 데이터베이스는 2가지입니다.
- 일정 데이터를 담을 데이터베이스
- 연락처 데이터를 담을 데이터베이스
일정 데이터베이스
일정 데이터베이스의 이름은 Diary.db 입니다.
테이블의 구상은 간단하게 다음과 같이 만들어보겠습니다.
테이블명 : 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 이며 일정 데이터베이스와 거의 동일합니다.
테이블명 : 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);
}
}
댓글남기기