📝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();
}
});
}
}
'Android Studio' 카테고리의 다른 글
[Android Studio] RecyclerView와 Adapter를 사용해 리스트를 화면에 표시하기 (0) | 2023.02.01 |
---|---|
[Android Studio] 메뉴 아이콘 벡터 이미지 만들기 (0) | 2023.01.31 |
[Android Studio] Shared Preferences (0) | 2023.01.31 |
[Android Studio] Activity 데이터 전달(+Back버튼 이벤트 처리) (0) | 2023.01.30 |
[Android Studio] Activity간의 화면 전환하기 (0) | 2023.01.30 |
댓글