Develop
2017.06.14 13:03
[android] SQLiteOpenHelper를 이용한 DBManager
조회 수 2200 댓글 0
객체와 이전 글(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 인스턴스를 이용하여 데이터의 추가/갱신/삭제/조회가 가능하다.
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
237 | System/OS |
[mac] OS X 요세미티 사용자가 많이 겪는 버그와 몇몇 불편사항
![]() |
hooni | 2015.01.04 | 1691 |
236 | System/OS |
[mac][추천 무료앱] 구름 입력기 - 국내 맥 사용자를 위한 한글 대안 입력기
1 ![]() |
hooni | 2015.01.04 | 2323 |
235 | System/OS | 개인적으로 쓰고 있는 bash_profile | hooni | 2015.01.16 | 1004 |
234 | Develop |
[maven] Mac OS에 메이븐(maven) 설치하기
![]() |
hooni | 2015.01.21 | 1234 |
233 | Develop |
[php] XE에서 도메인 별로 광고 다르게 적용하기
![]() |
hooni | 2015.01.28 | 718 |
232 | Develop |
[php] XE 스킨에서 특정 도메인 리다이렉션
![]() |
hooni | 2015.01.28 | 689 |
231 | Develop |
[js] 2048 예쁘게 만들고 있는거.. ㅋㄷ
![]() |
hooni | 2015.01.30 | 0 |
230 | Develop | [ios] URL 랜딩 속도(OpenURL 10초 정지되는) 이슈 | hooni | 2015.02.09 | 933 |
229 | Develop | [ios] 문자열로 함수 실행하기 (eval 함수처럼) | hooni | 2015.02.10 | 938 |
228 | Develop | [ios] 앱의 로컬 js 파일에서 해당 프로젝트의 이미지 불러오기 | hooni | 2015.02.10 | 738 |
227 | Develop | [ios] 로컬에 있는 html 실행하기 | hooni | 2015.02.10 | 1153 |
226 | Develop | [ios] 로컬에 있는 JS 파일 웹뷰에서 동적으로 실행하기 | hooni | 2015.02.10 | 1086 |