왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ckpt_file
  • imageprocessing
  • encoding='utf-8'
  • UnboundLocalError
  • PYTHON
  • OpenCV
  • 영상처리
  • 비지도학습
  • 의료이미징
  • 기상탐사
  • 컴퓨터비전
  • 딥러닝
  • 영상처리역사
  • alibidetect
  • pip install labelme
  • numpy
  • maskimage
  • matplotlib
  • get_long_description
  • labelme
  • ComputerVision
  • alibi-detection
  • tune()
  • yolov8
  • TensorFlow
  • unsupervised
  • labelme UnocodeDecodeError
  • pytorch
  • 영상기술
  • PIL

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Android - SQLite3 DB 사용법
Android Studio

Android - SQLite3 DB 사용법

2023. 1. 31. 17:45
728x90

 1. SQLiteOpenHelper

  • 데이터베이스 SQLite를 다루는 추상 클래스
  • 상속 받는 클래스는 생성자와 추상 메소드를 정의하여 사용

2. SQLiteOpenHelper 상속

  • SQLiteOpenHelper 클래스를 상속 받아 DB를 SQLite로 편리하게 제어 할 수 있음

 

  • 상속 받을 클래스 정의
    • 임의의 클래스 이름 : DatabaseHandler
public class DatabaseHandler extends SQLiteOpenHelper {

}
  • 추상 메소드 정의 및 기본 구성
public class DatabaseHandler extends SQLiteOpenHelper {
    // 데이터베이스 SQL 다루는 클래스
    // SQLiteOpenHelper 추상클래스를 상속 받는 클래스, 추상 메소드 정의

    // 데이터베이스 설정
    public DatabaseHandler(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    
    // 테이블을 설정하는 메소드
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
    }
    
    // 데이터베이스를 제어하는 메소드
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }

3. 추상 메소드 정의

onCreate

  • 테이블을 설정하는 메소드, 처음 실행 될 때 한번만 실행
  • TABLE_NAME, KEY_ID, KEY_NAME, KEY_PHONE은 임의의 변수
    @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);

    }

onUpgrade

  • DB를 제어하는 메소드
  • 아래의 예시 소스 코드에서는 기존의 테이블을 삭제하고 새로운 테이블을 생성하도록 구현
  • TABLE_NAME, DATABASE_NAME은 임의의 변수

 

    @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를 만든다.

        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에 저장하는 코드

package com.hyunsungkr.contactapp;

import androidx.appcompat.app.AppCompatActivity;

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

import com.hyunsungkr.contactapp.data.DatabaseHandler;
import com.hyunsungkr.contactapp.model.Contact;

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();


            }
        });

    }
}

'Android Studio' 카테고리의 다른 글

Android - RecyclerView 어댑터에서 새로운 액티비티 실행하는 방법과 몇 번째 행을 눌렀는지 알 수 있는 getAdapterPosition()  (0) 2023.02.01
Android - RecyclerView - 리스트를 화면에 출력하기  (0) 2023.02.01
Android - SharedPreferences 공유 저장소에 데이터 저장하기  (0) 2023.01.31
Android - Activity 간의 데이터 전달 방법 (단방향/양방향) / Back(뒤로가기) 이벤트 처리 방법  (0) 2023.01.30
Android - Activity Life Cycle 주요 함수와 화면 전환 방법  (0) 2023.01.30
    'Android Studio' 카테고리의 다른 글
    • Android - RecyclerView 어댑터에서 새로운 액티비티 실행하는 방법과 몇 번째 행을 눌렀는지 알 수 있는 getAdapterPosition()
    • Android - RecyclerView - 리스트를 화면에 출력하기
    • Android - SharedPreferences 공유 저장소에 데이터 저장하기
    • Android - Activity 간의 데이터 전달 방법 (단방향/양방향) / Back(뒤로가기) 이벤트 처리 방법
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바