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 |