군침이 싹 도는 코딩

SQLite 3 데이터 베이스 활용하는 법 ( SQLiteOpenHelper ) 본문

Android

SQLite 3 데이터 베이스 활용하는 법 ( SQLiteOpenHelper )

mugoori 2023. 1. 31. 17:32

# 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 코드