loading

프로그래밍/안드로이드

[Android Studio] 로컬DB 사용법(SQLiteOpenHelper, DBHelper)

침착곰 2021. 7. 11. 01:00
반응형

안녕하세요

프로그래밍을 하다보면 간단한 데이터를 저장해야하는 일이 발생하는데요

이번 포스팅에서는 안드로이드 스튜디오의 로컬DB를 사용하는 방법에 대해서 알아보겠습니다

로컬DB를 만드는 방법은 SQLiteOpenHelper클래스를 사용한 방법입니다

 


 

SQLiteOpenHelper란?

 데이터베이스 생성 및 버전관리를 도와주는 클래스입니다

onCreate단계에서 테이블을 생성하고 onUpgrade를 사용하여 안드로이드를 실행 시 DB를 계속해서 Upgrade를 해줄 수 있습니다

다른 MS-SQL, Oracle과 비슷한 쿼리문을 사용하여 테이블을 Insert, Update, Delete, Select를 수행할 수 있습니다

 


 

화면 디자인

화면 디자인입니다

간단하게 Insert문을 수행할 버튼 1개와 성명, 나이, 주소를 입력할 EditText를 추가해주고,

Select문을 수행할 버튼 1개와 결과를 출력할 ViewText를 만들었습니다

 


 

DBHelper.java

DBHelper 클래스를 생성해서 다양한 DB 쿼리문을 수행하는 메서드를 추가해줍니다

이 DB 쿼리문을 호출하여 로컬DB에 데이터를 입력, 수정, 삭제, 조회 동작들을 수행할 수 있습니다

package com.example.dbhelpertest;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
    static final String DATABASE_NAME = "test.db";

    // DBHelper 생성자
    public DBHelper(Context context, int version) {
        super(context, DATABASE_NAME, null, version);
    }

    // Person Table 생성
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE Person(name TEXT, Age INT, ADDR TEXT)");
    }

    // Person Table Upgrade
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS Person");
        onCreate(db);
    }

    // Person Table 데이터 입력
    public void insert(String name, int age, String Addr) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("INSERT INTO Person VALUES('" + name + "', " + age + ", '" + Addr + "')");
        db.close();
    }

    // Person Table 데이터 수정
    public void Update(String name, int age, String Addr) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("UPDATE Person SET age = " + age + ", ADDR = '" + Addr + "'" + " WHERE NAME = '" + name + "'");
        db.close();
    }

    // Person Table 데이터 삭제
    public void Delete(String name) {
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL("DELETE Person WHERE NAME = '" + name + "'");
        db.close();
    }

    // Person Table 조회
    public String getResult() {
        // 읽기가 가능하게 DB 열기
        SQLiteDatabase db = getReadableDatabase();
        String result = "";

        // DB에 있는 데이터를 쉽게 처리하기 위해 Cursor를 사용하여 테이블에 있는 모든 데이터 출력
        Cursor cursor = db.rawQuery("SELECT * FROM Person", null);
        while (cursor.moveToNext()) {
            result += " 이름 : " + cursor.getString(0)
                    + ", 나이 : "
                    + cursor.getInt(1)
                    + ", 주소 : "
                    + cursor.getString(2)
                    + "\n";
        }

        return result;
    }
}

 


 

MainActivity.java

버튼을 클릭하면 DBHelper클래스의 Insert문과 Delete문을 수행합니다

package com.example.dbhelpertest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // 디자인 변수 선언
    Button btnSave;
    Button btnSelect;

    EditText edtName;
    EditText edtAge;
    EditText edtAddr;
    TextView viewResult;

    // DBHelper
    DBHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 디자인 매핑
        setContentView(R.layout.activity_main);

        // Control 매핑
        btnSave = (Button) findViewById(R.id.btnSave);
        btnSelect = (Button) findViewById(R.id.btnSelect);
        edtName = (EditText) findViewById(R.id.edtName);
        edtAge = (EditText) findViewById(R.id.edtAge);
        edtAddr = (EditText) findViewById(R.id.edtAddr);
        viewResult = (TextView) findViewById(R.id.txtResult);

        // 버튼 클릭 이벤트 정의
        btnSave.setOnClickListener(this);
        btnSelect.setOnClickListener(this);

        dbHelper = new DBHelper(MainActivity.this, 1);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSave:
                dbHelper.insert(edtName.getText().toString(), Integer.parseInt(edtAge.getText().toString()), edtAddr.getText().toString());
                break;
            case R.id.btnSelect:
                viewResult.setText(dbHelper.getResult());
                break;
        }
    }
}

 


 

결과 화면

 

이상 SQLiteOpenHelper를 사용하여 로컬DB를 구현한 내용이었습니다!

반응형
그리드형