본문 바로가기
Android Studio

[Android Studio] SQLite(에스큐엘라이트) 데이터베이스 사용하기

by coding_su 2023. 1. 31.

📝SQLite3 데이터베이스 사용하기

SQLite는 MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만
서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다

 

아래 이미지같이 DatabaseHandler, Util 클래스를 만들어 사용했다

 

Util 클래스에는 데이터베이스와 테이블 관련 상수들을 입력해서 사용

public class Util {

    // 데이터 베이스 관련 상수들
    public static final int DB_VERSION = 1;
    public static final String DB_NAME = "contact_db";
    public static final String TABLE_NAME = "contact";

    // 테이블의 컬럼 관련 상수들
    public static final String KEY_ID = "id";
    public static final String KEY_NAME = "name";
    public static final String KEY_PHONE = "phone";
}

 

DatabaseHandler 클래스는 SQLiteOpenHelper 클래스를 상속받아 코드를 입력해줬다

테이블을 만들고 CRUD 사용

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_TAVLE = "drop table contact";
        // 쿼리문 실행
//        sqLiteDatabase.execSQL(DROP_TAVLE);
        sqLiteDatabase.execSQL(DROP_TAVLE, new String[]{Util.DB_NAME});

        // 테이블 재생성
        onCreate(sqLiteDatabase);
    }

    // 이제부터는 우리가 앱 동작시키는데 필요한 CRUD 관련된 SQL문이 들어간 메소드를 만든다

    // 1. 연락처 추가하는 메소드(함수) C
    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. 저장된 연락처를 모두 가져오는 메소드(함수) R
    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;
    }
    
    // 연락처 업데이트하는 메소드(함수) U
    public void updateContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        String query = "update contact " +
                "set name = ?, phone = ?" +
                "where id = ?";
        db.execSQL(query, new String[] {contact.name, contact.phone, contact.id+""}); // id는 int라 문자열로 변경
        db.close();

    }
    // 연락처를 삭제하는 메소드(함수) D
    public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "delete from contact " +
                    "where id = ?";
        String[] args = new String[] {contact.id+""};
        db.execSQL(query, args);
        db.close();

    }
}

 

만든 DatabaseHandler 클래스는 아래 액티비티에 사용했다

public class AddActivity extends AppCompatActivity {

    EditText editName;
    EditText editPhone;
    Button btnSave;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);

        editName = findViewById(R.id.editName);
        editPhone = findViewById(R.id.editPhone);
        btnSave = findViewById(R.id.btnSave);

        btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = editName.getText().toString().trim();
                String phone = editPhone.getText().toString().trim();

                // 이름과 전화번호가 모두 있어야한다
                if (name.isEmpty() || phone.isEmpty() ) {
                    Toast.makeText(AddActivity.this, "필수항목을 입력하세요", Toast.LENGTH_SHORT).show();
                    return;
                }
                // 묶어서 처리할 Contact 클래스를 만들고 객체를 하나 만든다
                Contact contact = new Contact(name, phone);

                // DB에 저장한다
                DatabaseHandler db = new DatabaseHandler(AddActivity.this);
                db.addContact(contact);

                // 유저한테 잘 저장되었다고 알려주고
                Toast.makeText(AddActivity.this,"저장되었습니다", Toast.LENGTH_SHORT).show();

                // 액티비티는 종료한다
                finish();
            }
        });


    }
}

댓글