시험 기간과 모바일 프로젝트 과제 일정이 겹쳐서, 단기간 내에 앱을 개발하기 위해 서버가 필요 없는 SQLite를 사용하기로 했다. SQLite는 파일 기반 데이터베이스로, 안드로이드 앱과 같은 환경에서 데이터베이스 서버를 구축하지 않고도 데이터 저장과 관리가 가능하다.
🚩 SQLite 동작 방식
안드로이드에서 SQLite는 SQLiteOpenHelper, SQLiteDatabase, Cursor와 같은 주요 클래스를 통해 동작한다.
SQLite 관련 클래스 및 인터페이스와 메소드
SQLiteOpenHelper 클래스
앱 실행 시 필요한 데이터베이스를 생성하고 테이블을 정의하는 데 사용된다.
주로 onCreate(), onUpgrade() 메서드를 통해 데이터베이스 초기화 및 버전 관리를 담당한다.
메소드 | 주요 용도 |
생성자 | DB 생성 |
onCreate() | 테이블 생성 |
OnUpgrade() | 테이블 삭제 후 다시 생성 |
getReadableDatabase() | 읽기 전용 DB 열기, SQLiteDatabase 반환 |
getWritableDatabase() | 읽고 쓰기용 DB 열기, SQLiteDatabase 반환 |
SQLiteDatabase 클래스
데이터베이스의 SQL 쿼리를 실행할 수 있는 클래스이다. execSQL() 메서드를 사용하여 INSERT, UPDATE, DELETE와 같은 SQL 명령을 실행하고, query()나 rawQuery()로 데이터를 SELECT하여 Cursor 객체를 반환받을 수 있다.
메소드 | 주요 용도 |
execSQL() | SQL문(Insert/Update/Delete)실행 |
close() | DB 닫기 |
query(), rawQuery() | Select 실행 후 커서 반환 |
생성자 | DB 생성 |
생성자 | DB 생성 |
Cursor 인터페이스
데이터베이스 쿼리 결과에 접근할 수 있는 인터페이스로, moveToFirst(), moveToNext() 등을 사용하여 쿼리 결과의 특정 위치로 이동할 수 있으며, getInt(), getString() 등을 통해 특정 컬럼 값을 가져올 수 있다.
메소드 | 주요 용도 |
moveToFirst() | 커서의 첫 행으로 이동 |
moveToLast() | 커서의 마지막 행으로 이동 |
moveToNext() | 현재 커서의 다음 행으로 이동 |
getInt(), getString(), getLong() .. | DB 테이블의 실제 데이터 반환 |
getColumnIndex(String columnName) | DB 테이블의 해당 필드명 반환 |
getColumnName(int columnIndex) | 필드 index에 해당하는 필드명 반환 |
getPosition() | Cursor가 가리키고 있는 DB 테이블 행 positon 반환 |
getCount() | Cursor가 참조할 수 있는 해당 테이블의 행의 갯수 반환 |
getColumnCount() | DB 테이블의 필드 갯수 반환 |
💾 SQLite 실행
술안주 월드컵 구현을 위해 worldCupDB 데이터베이스 생성 명령 프롬프트를 실행해 다음 순서를 따른다.
cd C:\Users\사용자명\AppData\Local\Android\Sdk\platform-tools
adb root
adb shell
cd databases
sqlite3 worldCupDB
📄 Table 생성
menu table
월드컵 게임 진행을 위한 술안주 테이블
CREATE TABLE menu (
menu_id INTEGER PRIMARY KEY AUTOINCREMENT,
menu_name TEXT,
image_path TEXT
);
bar table
학교 주변 술집을 추천하기 위한 술집 테이블
CREATE TABLE bar (
bar_id INTEGER PRIMARY KEY AUTOINCREMENT,
bar_name TEXT,
latitude REAL,
longitude REAL
);
bar table과 menu table을 연결하는 역할의 테이블
bar_menu table에는 각각의 행이 특정 술집과 특정 메뉴를 연결하고,
각각의 bar_id와 menu_id는 각각 bar table과 menu table의 외래 키로 설정된다.
이를 통해 각 술집이 여러 메뉴를 판매하거나
한 메뉴가 여러 술집에서 판매되는 다대다 관계를 나타낼 수 있다.
CREATE TABLE Bar_Menu (
id INTEGER PRIMARY KEY AUTOINCREMENT,
bar_id INTEGER,
menu_id INTEGER,
FOREIGN KEY (bar_id) REFERENCES Bar(bar_id) ON DELETE CASCADE,
FOREIGN KEY (menu_id) REFERENCES Menu(menu_id) ON DELETE CASCADE
💾 DB browser for SQLite
SQLite GUI 툴을 사용하면 데이터를 쉽게 확인할 수 있다.
이렇게 생성한 데이터베이스 파일을
Device File Explorer를 통해 AVD에 넣어서 사용 가능하다.
📁 안드로이드 스튜디오 이미지 파일
안스에서 사용하는 이미지 파일들은 일반적으로 res/drawable/ 폴더에 저장된다.
💡여기서 주의할 점
해당 폴더 안에서 직접 하위 폴더를 만들 수 없으며
모든 이미지는 res/drawable/에 바로 저장 된다.
월드컵을 진행하기 위해선 많은 안주 이미지 파일이 필요하기에
다른 ui에 사용되는 이미지 파일과 구분하기 위해
배경 이미지 ➜ background_
버튼 이미지 ➜ button_
메뉴 이미지 ➜ menu_
이렇게 규칙을 정해서 저장한다.
'프로젝트' 카테고리의 다른 글
[Android Studio] 앱 구동 속도 개선을 위한 SQLite 활용법 (1) | 2024.11.14 |
---|---|
[Android Studio] 술안주 월드컵 제안서 (0) | 2024.11.14 |