package com.minui.contactmanager.data;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import androidx.annotation.Nullable;
import com.minui.contactmanager.model.Contact;
import com.minui.contactmanager.util.Util;
import java.util.ArrayList;
public class DatabaseHandler extends SQLiteOpenHelper {
public DatabaseHandler(@Nullable Context context) {
super(context, Util.DATABASE_NAME, null, Util.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 테이블 생성
String CREATE_CONTACT_TABLE = "create table " + Util.TABLE_NAME + "(" +
Util.KEY_ID + " integer primary key, " +
Util.KEY_NAME + " text, " +
Util.KEY_PHONE + " text )";
Log.i("MyContact", "테이블 생성문 : " + CREATE_CONTACT_TABLE);
sqLiteDatabase.execSQL(CREATE_CONTACT_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
// 기존의 contact 테이블을 삭제하고,
String DROP_TABLE = "drop table " + Util.TABLE_NAME;
sqLiteDatabase.execSQL(DROP_TABLE, new String[]{Util.DATABASE_NAME});
// 새롭게 테이블을 다시 만든다.
onCreate(sqLiteDatabase);
}
// 우리가 앱 동작시키는데 필요한 SQL 문이 적용된 함수들을 만든다.
public void addContact(Contact contact) {
// 데이터베이스를 가져온다.
SQLiteDatabase db = this.getWritableDatabase();
// 테이블의 컬럼이름과 해당 데이터를 매칭해서 넣어준다.
ContentValues values = new ContentValues();
values.put(Util.KEY_NAME, contact.name);
values.put(Util.KEY_PHONE, contact.phone);
// 데이터베이스에, 위의 데이터를 insert
db.insert(Util.TABLE_NAME, null, values);
// db를 닫아줘야 한다.
db.close();
}
// 주소록 데이터 가져오기
// 1개의 주소록 데이터만 가져오기 : id로 가져오기
// select * from contact where id = 3;
public Contact getContact(int id) {
// 1. 데이터베이스를 가져온다.
SQLiteDatabase db = this.getReadableDatabase();
// 2. 쿼리문 만든다.
Cursor cursor = db.rawQuery("select * from contact where id = " + id, null);
// Cursor cursor2 = db.rawQuery("select * from contact where id = ?", new String[]{"" + id});
if(cursor != null) {
cursor.moveToFirst();
}
// 데이터를 가져오려면, 컬럼의 인덱스를 넣어주면 된다.
// id를 가져오는 방법
// cursor.getInt(0);
// name을 가져오는 방법
// cursor.getString(1);
// phone 을 가져오는 방법
// cursor.getString(2);
// DB에 저장된 데이터를 메모리에다 만들어줘야, cpu가 처리할 수 있다.
Contact contact = new Contact(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
return contact;
}
// 주소록 데이터 전체 가져오기
// select * from contact;
public ArrayList<Contact> getAllContacts() {
// 1. 데이터베이스를 가져온다.
SQLiteDatabase db = this.getReadableDatabase();
// 2. 쿼리문 만든다.
Cursor cursor = db.rawQuery("select * from contact", null);
ArrayList<Contact> contactList = new ArrayList<Contact>();
cursor.moveToFirst();
// for(int i = 0; i < cursor.getCount(); i++) {
// Contact contact = new Contact(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
// contactList.add(contact);
// cursor.moveToNext();
// }
if(cursor.moveToFirst()) {
do {
Contact contact = new Contact(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
contactList.add(contact);
} while(cursor.moveToNext());
}
return contactList;
}
// 데이터 수정하는 함수
public void updateContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
// ContentValues values = new ContentValues();
// values.put(Util.KEY_NAME, contact.name);
// values.put(Util.KEY_PHONE, contact.phone);
// db.update(Util.TABLE_NAME, values, Util.KEY_ID + "=?", new String[]{contact.id + ""});
db.execSQL("update contact set name = ? , phone = ? where id = ?", new String[]{contact.name, contact.phone, contact.id + ""});
db.close();
}
public void deleteContact(Contact contact) {
// delete from contact where id = 1;
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from contact where id = ?", new String[]{contact.id + ""});
db.close();
}
}
SQLiteOpenHelper 클래스를 상속받아 onCreate onUpgrade를 작성해준다.
'안드로이드' 카테고리의 다른 글
RecyclerView와 Adapter를 이용하여 리스트를 화면에 표시하는 방법 (0) | 2022.07.14 |
---|---|
for(:)문법 (0) | 2022.07.14 |
안드로이드 SharedPreferences를 이용한 데이터 저장과 불러오기 (0) | 2022.07.13 |
안드로이드 양방향 데이터 전달방법 (0) | 2022.07.13 |
안드로이드 액티비티 간의 단방향 데이터 전달 (0) | 2022.07.13 |