본문 바로가기
프로그래밍/Android

(Android) SQLiteDatabase - 내장데이터베이스

by LiveData 2018. 12. 20.
반응형

SQLiteDatabase : 내장 데이터 베이스를 사용할 때


안드로이드에는 내장 데이터 베이스가 존재합니다. (서버 X)


데이터 베이스의 사용 문법은 MySQL비슷한 가벼운 데이터베이스입니다.



먼저 기본 사용법에 대해 알아보겠습니다.






 1. 생성, 추가, 수정, 삭제



데이터 베이스 생성 - openOrCreateDatabase : 데이터 베이스가 있으면 열고 없으면 생성.

  openDatabase : 이미 존재하는 데이터 베이스가 있을경우.


1
2
3
4
5
6
7
8
9
10
11
12
//SQLiteDatabase 변수 
SQLiteDatabase db=null;
 
//파일 경로와 
File file=new File(getFileDir(),"student.db");
 
try {
    db=SQLiteDatabase.openOrCreateDatabase(file,null);
    //student.db 데이터 베이스가 있으면 열고 없으면 생성.
catch(SQLiteException e) {
    e.printStackTrace();
}
cs


(->추후 SQLiteOpenHelper를 extends한 class로 데이터베이스 관련 함수,변수 관리)




만든 db 파일에 테이블을 만들기


1
2
3
4
5
//db파일에 student 테이블이 없으면 테이블을 생성하는 쿼리
String dbCreateQuery= "CREATE TABLE IF NOT EXISTS student (NO INTEGER, NAME TEXT)";
 
//쿼리를 실행하는 execSQL 함수
db.execSQL(dbCreateQuery) ;
cs

 

NO, NAME 2가지 Column이 있는 student 테이블을 만들어 보았습니다.



이런식으로 String에 쿼리는 만들고 execSQL함수로 쿼리는 실행하는 원리는 통하여


추가(Insert), 수정(Update), 삭제(Delete) 를 할 수 있습니다.







2. 조회



데이터 베이스의 조회문에는 Select가 있습니다.


execSQL함수는 조회된 값을 반환하지 않기 때문에 다른 함수를 사용해야합니다.


이때 사용하는 함수인 query rawQuery를 사용할 수 있습니다.





 - rawQuery("쿼리","쿼리에 들어갈 변수 args");


예) 컬럼 NO,Name으로 NO가 2이고 NAME이 David인 값을 찾습니다.


1
Cursor cur=db.rawQuery("SELECT NO, NAME FROM student WHERE NO = ? AND NAME = ?"new String[] {"2""David"});
cs





 - query("테이블", Columns,"선택 값", "선택값 배열","그룹","조건절","정렬");  


예) 컬럼 NO,NAME으로 NO가 1인 값을 찾습니다.


1
 Cursor cur = db.query("student"new String[]{NO,NAME}, "NO=?"new String[]{"1"}, nullnullnull);
cs





반환된 select된 값의 위치정보를 접근할 수 있는 것이 바로 Cursor 인스턴스입니다.  



Cursor을 이용한 함수


    - getCount() : 전체 결과가 몇개인지 확인.

    - MoveToFirst() : 첫번째 결과를 반환.

    - MoveToNext() : 다음 값을 반환.

    - getColumnNames() : 결과에 포함한 전체 컬럼 이름.

    - requery() : 쿼리 재실행.

    - close() : 커서가 확보한 자원을 모두 해제.



예) NAME이 David인 결과를 찾고 결과 값들을 차례대로 로그출력


1
2
3
4
5
6
7
8
9
10
11
12
13
String sqlSelect = "SELECT * FROM student WHERE NAME=?" ;
 
Cursor cursor = sqliteDB.rawQuery(sqlSelect,new String[]{"David"}) ;
  while (cursor.moveToNext()) {
     // INTEGER로 선언된 첫 번째 "NO" 컬럼 값 가져오기.
     int no = cursor.getInt(0) ;
 
     // TEXT로 선언된 두 번째 "NAME" 컬럼 값 가져오기.
     String name = cursor.getText(1) ;
 
     //결과를 Debug
     Log.e("SELECT","NO : "+no+", NAME : "+name);
}
cs






참고

http://recipes4dev.tistory.com/120

http://egloos.zum.com/androcat/v/1776001

반응형