안드로이드 스튜디오/Java

안드로이드 스튜디오 : SQLite 사용

류창 2021. 11. 30. 23:24
반응형

 

안드로이드 환경에서 데이터베이스를통해 데이터를 관리하는방법을 알아보려고한다.

 

 

 

RDBMS (관계형 데이터베이스 관리 시스템) 이 많이 존재한다.

 

MySql , Oracle, MariaDB, SQLite... 등등 

 

그중에서 SQLite를 사용하여 데이터베이스를 관리해보도록 하기로했다.

 

https://do.co/3kD2Ybd

 

SQLite vs MySQL vs PostgreSQL: A Comparison Of Relational Database Management Systems | DigitalOcean

This article compares and contrasts three of the most widely implemented open-source RDBMSs: SQLite, MySQL, and PostgreSQL. Specifically, it explores the data types that each RDBMS uses, their advantages and disadvantages, and situations where they ar

www.digitalocean.com

 

 

SQLite를 쓰는 장점은 이름에서 알 수 있듯이 매우 가볍습니다. 사용하는 공간은 설치된 시스템에 따라 다르지만 600kb 미만의 공간을 차지합니다. 또한 완전히 독립형이므로 SQLite가 작동하기 위해 시스템에 설치해야 하는 외부 종속성이 없습니다.

 

이식성이 뛰어납니다. 데이터를 분리된 파일의 커다란 배치로 저장하는 다른 일반적은 데이터베이스와는 달리 SQLite는 단일 파일에 전체 데이터가 저장됩니다. 이 파일은 디렉터리 계층의 어디에나 위치할 수 있으며 이동식 디스크 또는 파일 전송 프로토콜을 통해 공유할 수 있습니다.

 

 

 

 

SQLite 데이터베이스 생성 준비

 

테이블의 정보를 따로 담아두는 Class TableInfo를 선언한다.

 

이렇게 TableInfo를 설정해두면, 매번 써야하는 정보를 중복선언하는걸 막을수있다.

 

SRP규칙을 지킬수도 있고 일석이조다.

 

 

SQLite 데이터베이스를 생성하기위해서 SQLiteOpenHelper 클래스를 참조(extends)해야한다. 

 

Database_version은 1로 저장해두었다.

->이 상수값은 데이터베이스의 스키마가 업데이트(변경)가 될때마다 증가해야한다.

 

Database_name은 "FeedReader.db"로 저장해두었다.

 

SQLite는 간단 명료한 데이터타입을 지원한다.

 

 

테이블을 생성할때 쓸 SQL_CREATE_TABEL 문을 생성한다.

 

MYSQL과 흡사한 SQL문을 작성하면됩니다.

 

ID는 Integer타입과 주요키로 지정합니다.

NAME,DEP는 Text타입으로 저장합니다.

AGE는 Integer타입으로 지정합니다.

 

 

테이블을 제거할때 쓸 SQL_DELETE_TABLE 문을 생성한다.

 

"Drop Table if exists" -> 테이블이 존재하면 테이블삭제

 

 

처음 오버라이딩 햇을때 화면

SQLiteOpenHelper를 참조하면 필수적으로 오버라이딩 해줘야하는 메소드다.

 

이걸 그대로 써도 되지만,  파라미터가 4개나 들어가니 쓰기편하게 파라미터를 1개로 줄여보았다.

 

1개로 줄이면 나중에 쓸때

이렇게 가독성이 좋게 바뀐다..

 

 

SQLite 데이터베이스 활용하기

 

 

데이터베이스를 접근하기위해 만들어둔 DbHelper생성

 

 

데이터를 추가하는 기능

 

ContentValues를 하나 선언해준다.  이것을통해 테이블에 저장할 정보를 저장한뒤 DB에 날릴것이다.

 

3가지 정보, Name , Dep, Age를 담아서 날려준다.

 

myDBHelper. getWritableDatabase()를 선언한다.  

이 메소드는, DB가없으면  OnCreate()를 선언하고,  스키마가 변경되면(version이 변경) OnUpgrade()를 선언한다.

 

db.insert() 메소드로 데이터를 넣어줍시다.

 

 

모든 데이터를 삭제하는기능

데이터를 삭제하는 코드다.

 

아주간단하게 db.execSQL() 메소드로  테이블을 삭제하자.

 

이것이외에 특정 데이터만 골라서 자르는 기능도  execSQL로 구현이가능하다.

 

 

 

데이터를 조회하는기능

 

데이터를 조회하는 기능이다.  데이터를 조회하기 위해선  Cursor를 선언해야한다.

 

이 Cursor 라는 기능은  조회된 여러개의 기능을 1행부터 차례대로 내려가면서 읽어준다.

C.mobeToNext()로 차례대로 내려간다.

 

col1 , col2 ,col3 ,col4는  Cursor가 읽은 데이터의 각각의 값이다.

우리가 지정해둔 값이 총 4개니  column값도 4개가 나온다.

 

 

이렇게 Cursor로 받는 메소드가 2가지가 있다. rawQuery()와 query()두 방법이 존재한다.

 

rawQuery()방식은 간단하게 "SQL문" 을 작성하여 그냥 날것으로 날려버리는것이다.

->이 rawQuery()는 간단한 SQL문을 작성할때 사용하면 좋다. EX) Select * From Table

 

이 방식은 Query()방식이다. 

쿼리방식은 복잡한 SQL문을  분해시켜서 코딩하는 방식이다.

->이 방식은 복잡한 SQL문을 가독성이 좋게 수정도 편하게 코딩하는방식이다.

 

 

 

반응형