Views 2060 Votes 0 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

객체와 이전 글(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
No. Category Subject Author Date Views
649 Develop [php] 3 Ways to Detect Mobile or Desktop in PHP file hooni 2020.01.28 3720
648 Develop [ios] iOS 의 인앱구매 소개 file hooni 2014.04.29 3825
647 Develop [android] 코드에서 문자열로 Resource 가져오기 hooni 2015.07.09 3936
646 Develop [ios] 아이폰 GPS 사용하기 hooni 2014.05.24 3945
645 Develop [ios] UDID 사용 제한에 따른 대안들 hooni 2014.03.13 3966
644 Develop [ios] iOS 7 이상 UIBarButtonItem 여백 file hooni 2014.03.27 4049
643 Develop [ios] DatePicker iOS 6.x 이하 디자인. file hooni 2014.04.10 4056
642 Develop [ios] AES256 알고리즘을 이용해 데이터 암호화/복호화 방법 file hooni 2015.07.21 4099
641 Develop [ios] 애플 앱스토어 IDFA 리뷰 정책 변경 안내 file hooni 2014.05.07 4179
640 Develop [c#]뉴 툴바 개인적으로 만든거.. (old) secret hooni 2013.04.23 4272
639 Develop [ios] URL Scheme 이용하여 앱 설치 확인 hooni 2014.03.10 4364
638 Develop [ios] 앱딜리게이트 라이프사이클 (AppDelegate Lifecycle) file hooni 2014.05.09 4451
637 Develop [ios] UUID 생성 + Key Chain 연동 file hooni 2016.05.13 4659
636 Develop [ios] Objective-C 프로퍼티의 strong, weak, assign file hooni 2014.03.17 4684
635 Develop [ios] UITableView 특정 Row만 Update hooni 2014.04.08 4774
634 Develop [android] 안드로이드 동영상 스트리밍 예제 2 hooni 2015.01.02 4813
Board Pagination Prev 1 ... 11 12 13 14 15 ... 53 Next
/ 53