조회 수 2191 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

객체와 이전 글(https://hooni.net/83716)에서 Activity에서 호출하여 사용하는 간단한 SQLite 예제를 소개했고,

이 단점을 보완하여 별도의 코드를 만들어 재사용할 수 있는 예제를 소개한다. (SQLiteOpenHelper)


# DBManager.java

import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.widget.Toast;
 
//DB를 총괄관리
public class DBManager {
 
    // DB관련 상수 선언
    private static final String dbName = "APinfo.db";
    private static final String tableName = "APinfo";
    public static final int dbVersion = 1;
 
    // DB관련 객체 선언
    private OpenHelper opener; // DB opener
    private SQLiteDatabase db; // DB controller
 
    // 부가적인 객체들
    private Context context;
 
    // 생성자
    public DBManager(Context context) {
        this.context = context;
        this.opener = new OpenHelper(context, dbName, null, dbVersion);
        db = opener.getWritableDatabase();
    }
 
    // Opener of DB and Table
    private class OpenHelper extends SQLiteOpenHelper {
 
        public OpenHelper(Context context, String name, CursorFactory factory,
                int version) {
            super(context, name, null, version);
            // TODO Auto-generated constructor stub
        }
 
        // 생성된 DB가 없을 경우에 한번만 호출됨
        @Override
        public void onCreate(SQLiteDatabase arg0) {
            // String dropSql = "drop table if exists " + tableName;
            // db.execSQL(dropSql);
 
            String createSql = "create table " + tableName + " ("
                    + "id integer primary key autoincrement, " + "SSID text, "
                    + "capabilities integer, " + "passwd text)";
            arg0.execSQL(createSql);
            Toast.makeText(context, "DB is opened", 0).show();
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
        }
    }
 
    // 데이터 추가
    public void insertData(APinfo info) {
        String sql = "insert into " + tableName + " values(NULL, '"
                + info.getSSID() + "', " + info.getCapabilities() + ", '"
                + info.getPasswd() + "');";
        db.execSQL(sql);
    }
 
    // 데이터 갱신
    public void updateData(APinfo info, int index) {
        String sql = "update " + tableName + " set SSID = '" + info.getSSID()
                + "', capabilities = " + info.getCapabilities()
                + ", passwd = '" + info.getPasswd() + "' where id = " + index
                + ";";
        db.execSQL(sql);
    }
 
    // 데이터 삭제
    public void removeData(int index) {
        String sql = "delete from " + tableName + " where id = " + index + ";";
        db.execSQL(sql);
    }
 
    // 데이터 검색
    public APinfo selectData(int index) {
        String sql = "select * from " + tableName + " where id = " + index
                + ";";
        Cursor result = db.rawQuery(sql, null);
 
        // result(Cursor 객체)가 비어 있으면 false 리턴
        if (result.moveToFirst()) {
            APinfo info = new APinfo(result.getInt(0), result.getString(1),
                    result.getInt(2), result.getString(3));
            result.close();
            return info;
        }
        result.close();
        return null;
    }
 
    // 데이터 전체 검색
    public ArrayList<apinfo> selectAll() {
        String sql = "select * from " + tableName + ";";
        Cursor results = db.rawQuery(sql, null);
 
        results.moveToFirst();
        ArrayList<apinfo> infos = new ArrayList<apinfo>();
 
        while (!results.isAfterLast()) {
            APinfo info = new APinfo(results.getInt(0), results.getString(1),
                    results.getInt(2), results.getString(3));
            infos.add(info);
            results.moveToNext();
        }
        results.close();
        return infos;
    }
}


# Activity

DBManager manager = new DBManager(this);
manager.updateData(newInfo, index);
manager.insertData(newInfo);


Activity에서 DBManager를 통해 SQLite를 이용하는 샘플 코드이다.

DBManager 인스턴스를 생성하는 순간 DB가 오픈되고, 만약 해당 DB나 Table이 존재하지 않으면 OpenHelper()와 onCreate() 메소드에 의해 자동 생성된다.

DB가 오픈되면 생성한 DBManager 인스턴스를 이용하여 데이터의 추가/갱신/삭제/조회가 가능하다.


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1093 System/OS [macos] How to Fix ‘You Shut Down Your Computer Because of a Problem’ file hooni 2022.06.01 973
1092 Develop [c] 이진 탐색 두 가지 코드 (재귀/반복) file hooni 2015.06.26 976
1091 Develop [ios] UIWebView에서 로컬에 있는 html 파일 불러오기 hooni 2015.02.10 978
1090 PPT [ppt] Information Security 발표 자료 (@Team Study 2012.11.15) file hooni 2015.07.22 980
1089 Develop [ios] iOS 8 개발자가 우선 알아야 할 3가지 file hooni 2014.10.02 984
1088 Develop [android] AlertDialog 메시지 창 띄우기 hooni 2015.07.09 985
1087 Etc 수리통계학 : 표본공간과 사상-1 hooni 2015.04.20 992
1086 PPT [ppt] iOS 플라랩#02(2015.03.19) 발표 자료 file hooni 2015.04.24 992
1085 Develop [js] 좋은 강연자료 & UI 자료 hooni 2014.10.06 993
1084 Develop [ios] APNS에 사용할 인증서 만들기 (KeyChain에 있는 인증서 Export) file hooni 2015.01.03 993
1083 System/OS 개인적으로 쓰고 있는 bash_profile hooni 2015.01.16 994
1082 Develop [kotlin] 코틀린 안드로이드 앱 버전/빌드 정보 hooni 2020.12.15 994
1081 Develop [ios] ViewController Push할 때 애니메이션 효과 hooni 2015.10.23 998
1080 System/OS [linux] The Ultimate Wget Download Guide With 15 Awesome Examples hooni 2020.05.26 998
1079 PPT [ppt] Equation Solving 발표 자료 (@AjaxUI랩 밋업데이 2012.02.28) file hooni 2015.07.22 1009
1078 Develop [c] RSA 암호화 구현(gmp 라이브러리 활용) file hooni 2016.10.03 1017
Board Pagination Prev 1 4 5 6 7 8 ... 74 Next
/ 74