SQLite 데이터베이스 이용하기 - SQLiteOpenHelper 클래스

CODEDRAGON Development/Android

반응형

   

   

SQLite 데이터베이스 이용하기

  • SQLiteOpenHelper 클래스
  • SQLiteOpenHelper클래스의 메소드
  • 데이터 추가
  • SELECT - 데이터 가져오기
  • UPDATE - 데이터 업데이트
  • DELETE - 데이터 삭제
  • 데이터 불러오기

 


 

 

 

SQLiteOpenHelper 클래스

  • SQLiteOpenHelper는 데이터베이스에 접근할 수 있게 해주는 클래스
  • 데이터베이스를 생성하고 오픈하거나 닫기를 하려면 SQLiteOpenHelper 객체를 사용해야 합니다.
  • SQLiteOpenHelper 클래스는 애플리케이션에서 요구하는 내용에 따라 데이터베이스를 생성하거나 업그레이드하는 기능 제공합니다.
  • DatabaseHelper클래스는 SQLiteOpenHelper클래스를 상속받아 데이터베이스에 접근하게 하는 사용자 정의 클래스

   

public class DatabaseHelper extends SQLiteOpenHelper{


// 생성자
public DatabaseHelper (Context context){
super(context, "dbtest", null, 1);
//context: Activity등의 Context 인스턴스
//dbtest: 데이터베이스의 이름
//null: 커서 팩토리(보통 null지정)
//1: 데이터베이스 스키마 버전
}
public void onCreate(SQLiteDatabase db){
//테이블을 생성하고 초기 데이터를 추가
String table_sql = "CREATE TABLE test( _id INTEGER PRIMARY KEY
AUTOINCREMENT, name TEXT NOT NULL);";
db.execSQL(table_sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
// 버전 번호를 확인해서 새로운 스키마로 적절하게 업그레이드 수행
db.execSQL("DROP TABLE IF EXISTS test");
onCreate(db); //onCreate 메소드를 호출해서 새로 table 셋팅
}
}
  

   

   

SQLiteOpenHelper클래스의 메소드

메서드 설명
onCreate
  • DB가 처음 만들어질 때 호출되며
  • 테이블을 생성하고 초기 레코드 삽입을 하게 됩니다.
onUpgrade
  • DB를 업그레이드 할 때 호출됩니다.
  • DB 버전이 변경될 때 호출되며 이때 기존 테이블을 삭제하고 새로 만들거나 ALTER TABLE 스키마를 수정하게 됩니다.
onOpen
  • DB를 열 때 호출됩니다.
getReadableDatabase
  • 읽기 위해 DB를 오픈합니다.
  • DB가 존재하지 않을 경우, onCreate가 호출되며 버전이 바뀌었으면 onUpgrade가 호출됩니다.
getWritableDatabase
  • 읽고 쓰기 위해 DB를 오픈합니다.
  • 권한이 없거나 디스크가 가득차면 오류가 발생합니다.
close
  • DB를 닫습니다.

   

   

 

데이터 추가

데이터베이스에 데이터를 저장하는 명령어

ContentValues cv = new ContentValues();
cv.put("title", "해피 데이");
cv.put("name", "홍길동");
db.("member", "title", cv);

   

   

 

SELECT - 데이터 가져오기

db.query(TABLE_NAME, //테이블병
String[] {"name", "member"}, //컬럼 명세
null, //WHERE 절
null, //WHERE절에 전달될 데이터
null, //groupBy절
null, //having절
MEMO_ID + " DESC" //ORDER BY
);

   

 

GROUP BY

  • GROUP BY 절은 말 그대로 특정 칼럼을 기준으로 그룹으로 묶어 주는 역할을 합니다.

 

   

HAVING

  • HAVING절은 WHERE절과 비슷한 개념으로 조건으로 제한하되 집계함수에 대해서 제한하게 됩니다.
  • HAVING 절은 반드시 GROUP BY 절 다음에 나와야 합니다.

   

 

집계함수(aggregate function)

  • SQL 집계 함수는 하나의 칼럼의 여러 값을 읽어 하나의 값으로 반환합니다.
  • 집계 함수는 주로 GROUP BY 절과 함께 사용됩니다.
  • 자주 사용되는 집계 함수로는 다음과 같은 것들이 있습니다.

   

집계함수 설명
COUNT 행의 개수를 센다.
AVG 행들의 값들을 평균낸다.
SUM 행들의 값을 모두 더한다.
MAX 최대값을 구한다.
MIN 최소값을 구한다.
STDEV 표준편차를 구한다.

   

   

   

UPDATE - 데이터 업데이트

데이터베이스에 저장된 데이터를 수정하는 명령어

ContentValues cv = new ContentValues();
cv.put("name", "홍길동");

 

String[] params = new String[] {"dragon"};
db.update("member", cv, "userid=?", params);

 

   

   

DELETE - 데이터 삭제

데이터베이스에 저장된 데이터를 삭제하는 명령어

String[] params = new String[]{userid};
db.delete("member", "userid=?", params);

 

   

   

 

데이터 불러오기

rawQuery() 메소드를 사용해 SELECT 구문을 직접 실행

Cursor c = db.rawQuery("SELECT name FROM sqlite_master where type='table' AND name='constants'", null);

   

query() 메소드를 인자로 각 부분의 값을 넘겨 실행

public Cursor query(String table, String[] columns, String selection, String[] selcetionArgs, String groupBy, String having, String orderBy, String limit)

 

설명
table 대상 테이블 이름
columns 값을 가져올 컬럼 이름의 배열 (null : 모든 열)
selection WHERE 구문
물음표를 사용해 인자의 위치를 지정할 수 있음 (null : 모든 레코드)
selectionArgs WHERE 구문에 들어가는 인자값
groupBy GROUP BY 구문 (null : 미사용)
orderBy ORDER BY 구문 (null : 미사용)
limit 레코드수 지정 (null : 미사용)

 

SQLiteQueryBuilder 클래스의 query() 메소드 이용