꿈꾸는 시스템 디자이너

SQLiteOpenHelper 사용법 본문

Development/Android

SQLiteOpenHelper 사용법

독행소년 2013. 7. 25. 17:37

앞서 설명한 SQLite 예제(http://here4you.tistory.com/49)를 이용하면 쉽게 DB관련 작업을 수행할 수 있다. 다만 해당 예제에서는 DB관련한 코드들이 Activity 코드에 포함되어야 한다는 단점이 있다. 별도의 DB관리 코드를 만들어서 재사용하고 싶을 때에는 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);


엑티비티에서 DBManager를 통해 SQLite를 이용하는 위의 코드내용과 같다.

DBManager 객체를 생성하는 순간 DB가 오픈된다. 만약 해당 DB나 Table이 존재하지 않는다면 OpenHelper()와 onCreate() 메소드들에 의해 자동 생성된다.

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


Comments