본문 바로가기

Android/Java

SQLite를 Util로 만들어서 사용하기! - 2

반응형

오늘은 Android 의 local database인 SQLite를 다른 버전으로 만들어봤습니다.


좀더 쉽고 편하게 사용하는 방법입니다!


필요한 class는 


1. DBHelper

2. SQLiteUtil


입니다.


이 부분에서는 table을 2개 만들거니, 참고해서 여러개의 table을 사용해 만드셔도 됩니다!




1. DBHelper

public class DBHelper extends SQLiteOpenHelper {
DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sqlStudent = "create table if not exists "+ Defines.DATABASE_USER+"(" +
"_no integer primary key autoincrement," +
"id text, " +
"password text, " +
"cellphone text);";
db.execSQL(sqlStudent);

String sqlTeacher = "create table if not exists "+Defines.DATABASE_MEMO+"(" +
"_no integer primary key autoincrement," +
"id text, " +
"time text, " +
"content text, " +
"image_path text);";
db.execSQL(sqlTeacher);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sqlStudent = "drop table if exists "+ Defines.DATABASE_USER+";";
db.execSQL(sqlStudent);

String sqlTeacher = "drop table if exists "+Defines.DATABASE_MEMO+";";
db.execSQL(sqlTeacher);

onCreate(db); // 다시 테이블 생성
}
}

create table을 2개를 만들어서 사용합니다.




2. SQLiteUtil

private SQLiteUtil() {}
private static class SingleTon {
public static final SQLiteUtil Instance = new SQLiteUtil();
}
public static SQLiteUtil getInstance() {
return SingleTon.Instance;
}

private SQLiteDatabase sqLiteDatabase;
private String tableName;
public void setInintView(Context context, String tableName) {
this.tableName = tableName;

DBHelper helper = new DBHelper(
context, // 현재 화면의 제어권자
Defines.DATABASE_NAME, // 데이터베이스 이름
null, // 커서팩토리 - null 이면 표준 커서가 사용됨
2);

try {
sqLiteDatabase = helper.getWritableDatabase();
} catch (SQLiteException e) {
e.printStackTrace();
Dlog.e(tableName +" 데이터 베이스를 열수 없음");
}
}

public void insert(String first, String second, String third) {
ContentValues values = new ContentValues();
// 키,값의 쌍으로 데이터 입력
if(tableName.equals(Defines.DATABASE_USER)) {
values.put("id", first);
values.put("password", second);
values.put("cellphone", third);
} else if(tableName.equals(Defines.DATABASE_MEMO)) {
values.put("id", SharedPreferenceUtil.getInstance().getLoginID());
values.put("time", first);
values.put("content", second);
values.put("image_path", third);
}

long result = sqLiteDatabase.insert(tableName, null, values);
Dlog.i(tableName+" "+result + "번째 row insert 성공했음");
}

public void delete(int number) {
int result = sqLiteDatabase.delete(tableName, "no=?", new String[]{String.valueOf(number)});

Dlog.i(tableName +" "+ result + "개 row delete 성공");
}

public void update(String first, String second, String third) {
// 해당 _no 가져와서 _no 에 맞는 값을 변경하게끔 수정
ContentValues values = new ContentValues();
values.put("id", SharedPreferenceUtil.getInstance().getLoginID());
values.put("time", first);
values.put("content", second);
values.put("image_path", third);

int result = sqLiteDatabase.update(tableName,
values, // 뭐라고 변경할지 ContentValues 설정
"id=?", // 바꿀 항목을 찾을 조건절
new String[]{SharedPreferenceUtil.getInstance().getLoginID()});// 바꿀 항목으로 찾을 값 String 배열

Dlog.i(tableName+" "+result + "번째 row update 성공했음");
}

// 로그인 시에 가져온 id와 pw를 SQLite의 data와 비교하기 위한 method
public int selectLogin(String loginID, String loginPassword) {
Cursor c = sqLiteDatabase.query(tableName, null, null, null, null, null, null);

while (c.moveToNext()) {
String id = c.getString(1);
String password = c.getString(2);

if(id.equals(loginID) && password.equals(loginPassword)) {
Dlog.i(tableName+" id : " + id + ", password : " + password);
return Defines.CODE_1000;
}
}

return Defines.CODE_401;
}

public void selectAll() {
Cursor c = sqLiteDatabase.query(tableName, null, null, null, null, null, null);
while (c.moveToNext()) {
int _no = c.getInt(0);
String first = c.getString(1);
String second = c.getString(2);
String third = c.getString(3);

Dlog.i(tableName+" _no : " + _no + ", first : " + first + ", second : " + second + ", third : " + third);
}
}


저는 SingleTon을 많이 사용하는데, 메모리 할당을 한 번만 해줘서 좋더라구요.


이렇게 구현한걸 필요한 곳에 SQLiteUtil.getInstance().method; 해서 사용하면 됩니다.


전에 올렸던거 보다 훨씬 쉽고 편합니다!!!ㅎㅎ


----------------------------------이상 SQLiteUtil 2번째 버전이었습니다.


반응형