군침이 싹 도는 코딩
SQLite 3 데이터 베이스 활용하는 법 ( SQLiteOpenHelper ) 본문
# SQLiteOpenHelper 를 상속받으면 메소드를 구현하라고 뜬다
즉 이 클래스는 추상 클래스임을 알 수 있다
# 임플리먼트 메소드를 눌러 두개의 메소드를 받아온다
# 두개의 메소드를 받아왔음에도 에러가 뜬다
이유는 생성자가 또 있기때문이다
# 생성자 또한 3가지중에 하나를 받아온다
package com.mugoori.contactapp.model;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class sss extends SQLiteOpenHelper {
public sss(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
# 이것으로 기본틀이 완성됐다
package com.mugoori.contactapp.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.mugoori.contactapp.model.Contact;
import com.mugoori.contactapp.util.Util;
import java.util.ArrayList;
public class DatabaseHandler extends SQLiteOpenHelper {
public DatabaseHandler(@Nullable Context context) {
super(context, Util.DB_NAME, null, Util.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 테이블 생성
String CREATE_CONTACT_TABLE= "create table contact ( id integer primary key, name text, phone text )";
sqLiteDatabase.execSQL(CREATE_CONTACT_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
// 기존의 테이블을 삭제하고 새 테이블을 다시 만든다
String DROP_TABLE = "drop table contact";
// sqLiteDatabase.execSQL(DROP_TABLE);
sqLiteDatabase.execSQL(DROP_TABLE, new String[]{Util.DB_NAME});
onCreate(sqLiteDatabase);
}
// 이제부터는 우리가 앱 동작시키는데 필요한 CRUD 관련된 SQL 문이 들어간 메소드를 만들자
// 1. 연락처 추가하는 메소드
public void addContact(Contact contact){
// 1. 데이터베이스를 가져온다
SQLiteDatabase db = this.getWritableDatabase();
// 2. 저장가능한 형식으로 만들어준다
ContentValues values = new ContentValues();
values.put(Util.KEY_NAME,contact.name);
values.put(Util.KEY_PHONE,contact.phone);
// 3. insert 한다
db.insert(Util.TABLE_NAME, null, values);
// 4. DB 사용이 끝나면 닫아준다
db.close();
}
// 2. 저장된 연락처를 가져오는 메소드
public ArrayList<Contact> getAllContacts(){
// 1. 데이터베이스를 가져온다
SQLiteDatabase db = this.getReadableDatabase();
// 2. 쿼리문 만든다
String query = "select * from contact";
// 3. 쿼리문을 실행하여 커서로 받는다
// 두번째 파라미터 변수처리
Cursor cursor = db.rawQuery(query,null);
// 3-1 여러 데이터를 저장할 어레이 리스트 만든다
ArrayList<Contact> contactArrayList = new ArrayList<>();
// 4. 커서에서 데이터를 뽑아낸다
if (cursor.moveToFirst()){
do {
int id = cursor.getInt(0);
String name = cursor.getString(1);
String phone = cursor.getString(2);
Log.i("Contact_TABLE",id + ", "+name+", "+phone);
// 이 데이터를 화면에 표시하기 위해서는
// 메모리에 전부 다 남아있어야 한다
Contact contact = new Contact(id,name,phone);
contactArrayList.add(contact);
} while (cursor.moveToNext());
}
// 5. DB 닫기
db.close();
// 6. DB에서 읽어온 연락처 정보를 리턴해야된다
return contactArrayList;
}
}
# 기본틀을 활용해서 DB를 구축한다
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,AddActivity.class);
startActivity(intent);
}
});
// db 로부터 데이터를 가져와서 리사이클러뷰에 표시하자
DatabaseHandler db = new DatabaseHandler(MainActivity.this);
contactList = db.getAllContacts();
db.close();
// 어댑터를 만든다
adapter = new ContactAdapter(MainActivity.this,contactList);
// 어댑터를 리사이클러뷰에 셋팅
recyclerView.setAdapter(adapter);
# Util 코드
'Android' 카테고리의 다른 글
Adapter 만드는 법 (0) | 2023.02.01 |
---|---|
메뉴 아이콘 이미지를 백터 이미지로 만드는 방법 (0) | 2023.01.31 |
이메일 형식 체크하기 ( pattern ) (0) | 2023.01.31 |
SharedPreference 저장하기 불러오기 ( putString, getString ) (0) | 2023.01.31 |
액티비티 ( Activity ) 간의 양방향 데이터 전달법과 액티비티 백버튼 누를때 ( ActivityResultLauncher<Intent>, setResult ) (0) | 2023.01.30 |