반응형
오늘은 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번째 버전이었습니다.
반응형
'Android > Java' 카테고리의 다른 글
android studio에서 package name 변경하기 (0) | 2018.06.02 |
---|---|
플레이스토어에 앱 등록하기 (1) | 2018.06.02 |
SQLite를 Util로 만들어서 사용하기! (0) | 2018.05.17 |
간단한 SplashActivity 만들기 (0) | 2018.05.09 |
ProgressbarUtil 만들기 (0) | 2018.05.08 |