일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- sklearn
- list
- string
- len()
- Dictionary
- 반복문
- 최댓값
- Python
- pandas
- data
- Machine Learning
- nan
- wcss
- count()
- elbow method
- 덴드로그램
- hierarchical_clustering
- DataFrame
- 분류 결과표
- 최솟값
- numpy
- matplotlib
- analizer
- DataAccess
- append()
- del
- insert()
- IN
- function
- dendrogram
- Today
- Total
개발공부
[Android] SQLite 데이터베이스 활용하는 방법 본문
주소록 테이블 예제
1. 새로운 프로젝트를 생성하고, MainActivity가 있는 패키지에 아래와 같은 패키지를 생성해줍니다.
data : 데이터베이스를 다룰 수 있는 핸들러 클래스가 들어갈 패키지
model : 데이터 베이스 테이블이 들어갈 패키지
util : 데이터 베이스를 다루기 위해 필요한 것들을 넣을 수 있는 패키지 (테이블 명, 컬럼 명 같은 상수)
2. util/Util.java
package com.fullspringwater.sqlitesample.util;
public class Util {
// 데이터베이스 관련된 상수
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "contact_db";
public static final String TABLE_NAME = "contacts";
// 테이블의 컬럼 관련된 상수
public static final String KEY_ID = "id";
public static final String KEY_NAME = "name";
public static final String KEY_PHONE = "phone";
}
3. model/Contact.java
package com.fullspringwater.sqlitesample.model;
public class Cantact {
public int id;
public String name;
public String phone;
public Contact(int id, String name, String phone){
this.id = id;
this.name = name;
this.phone = phone;
}
public Contact(String name, String phone) {
this.name = name;
this.phone = phone;
}
}
4. data/DatabaseHandler.java
4-1.SQLiteOpenHelper 를 extends 합니다.
4-2. 빨간 전구를 클릭한 후 Implement methods를 클릭합니다.
4-3. 나오는 함수를 모두 선택후 OK를 클릭합니다.
4-4. 다시한번 전구를 클릭한후 Create constructor matching super를 누릅니다.
4-5. 그리고 아무 생성자를 하나 생성해줍니다.
4-6. 생성자를 아래와 같이 고칩니다.
public DatabaseHandler(@Nullable Context context) {
super(context, Util.DATABASE_NAME, null, Util.DATABASE_VERSION);
}
이제부터 CRUD 기능을 구현해 보겠습니다.
4-7. onCreate()에는 테이블 생성문을, onUpgrade()에는 테이블 삭제후 재생성하는 기능을 넣어줍니다.
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 테이블 생성
String CREATE_CONTACT_TABLE = "create table " + Util.TABLE_NAME + "(" +
Util.KEY_ID + " integer primary key, " + Util.KEY_NAME + " text, " +
Util.KEY_PHONE + " text)";
Log.i("MyContact", "테이블 생성문 : " + CREATE_CONTACT_TABLE);
// 쿼리 실행
sqLiteDatabase.execSQL(CREATE_CONTACT_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
// 기존의 contact 테이블을 삭제하고,
String DROP_TABLE = "drop table " + Util.TABLE_NAME;
sqLiteDatabase.execSQL(DROP_TABLE, new String[]{Util.DATABASE_NAME});
// 새롭게 테이블을 다시 만든다
onCreate(sqLiteDatabase);
}
4-7. 데이터 추가하는 함수
// 우리가 앱 동작 시키는데 필요한 SQL 문이 적용된 함수들을 만든다.
// CRUD 관련 함수들을 만든다.
public void addContact(Contact contact){
// 데이터베이스를 가져온다.
SQLiteDatabase db = this.getWritableDatabase();
// 테이블의 컬럼이름과 해당 데이터를 매칭해서 넣어준다.
ContentValues values = new ContentValues();
values.put(Util.KEY_NAME, contact.name);
values.put(Util.KEY_PHONE, contact.phone);
db.insert(Util.TABLE_NAME, null, values);
db.close();
}
4-8. 테이블의 전체행을 읽어오는 함수
방법 1. for문
// 주소록 데이터 전체 가져오기
// select * from contact;
public ArrayList<Contact> getAllContact(){
// 데이터베이스를 가져온다.
SQLiteDatabase db = this.getReadableDatabase();
// 2. 쿼리문 만든다.
Cursor cursor = db.rawQuery("select * from " + Util.TABLE_NAME + ";", null);
ArrayList<Contact> contactList = new ArrayList<>();
if(cursor.moveToFirst()) {
for(int i=0; i< cursor.getCount(); i++) {
Contact contact = new Contact(
cursor.getInt(0), cursor.getString(1), cursor.getString(2));
contactList.add(contact);
cursor.moveToNext();
}
}
db.close();
return contactList;
}
방법 2. do-while문
// 주소록 데이터 전체 가져오기
// select * from contact;
public ArrayList<Contact> getAllContact(){
// 데이터베이스를 가져온다.
SQLiteDatabase db = this.getReadableDatabase();
// 2. 쿼리문 만든다.
Cursor cursor = db.rawQuery("select * from " + Util.TABLE_NAME + ";", null);
ArrayList<Contact> contactList = new ArrayList<>();
if(cursor.moveToFirst()){
do{
Contact contact = new Contact(
cursor.getInt(0), cursor.getString(1), cursor.getString(2));
contactList.add(contact);
}while(cursor.moveToNext());
}
db.close();
return contactList;
}
4-9. 테이블 수정하는 함수
방법 1
// 데이터 수정하는 함수
public void updateContact(Contact contact){
// 데이터베이스를 가져온다.
SQLiteDatabase db = this.getWritableDatabase();
// 쿼리문 만든다.
db.execSQL("update " + Util.TABLE_NAME +
" set " + Util.KEY_NAME + "= ?, " + Util.KEY_PHONE + " = ? " +
"where " + Util.KEY_ID + "= ?;",
new String[]{contact.name, contact.phone, contact.id+""});
db.close();
}
방법 2
// 데이터 수정하는 함수
public void updateContact(Contact contact){
// 데이터베이스를 가져온다.
SQLiteDatabase db = this.getWritableDatabase();
// 방법 3
db.execSQL("update " + Util.TABLE_NAME +
" set " + Util.KEY_NAME + "= " + contact.name +
", " + Util.KEY_PHONE + " = " + contact.phone +
"where " + Util.KEY_ID + "= " + contact.id);
db.close();
}
4-10. 데이터 삭제하는 함수
public void deleteContact(Contact contact){
// delete from contact where id= 1;
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from " + Util.TABLE_NAME +
" where " + Util.KEY_ID + " = ?;", new String[]{contact.id+""});
db.close();
}
5. 이제 실제로 사용하는 것을 테스트 해보겠습니다.
5-1. 데이터 생성, 읽어오기
package com.fullspringwater.sqlitesample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.fullspringwater.sqlitesample.data.DatabaseHandler;
import com.fullspringwater.sqlitesample.model.Contact;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ArrayList<Contact> contactList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 디비에 저장하기
// 디비 핸들러 가져오기
// 데이터베이스에 넣고, 가져오는 것 테스트
DatabaseHandler db = new DatabaseHandler(MainActivity.this);
// 컨택 객체 생성
Contact contact = new Contact("홍길동", "010-1234-5678");
// 주소록 데이터를 디비에 저장하는 함수 호출
db.addContact(contact);
// 주소록 데이터를 디비에서 가져와서, 로그 찍어보자
contactList = db.getAllContact();
for(Contact data : contactList){
Log.i("MyContact: ", "id : " + data.id +
", name : " + data.name + ", phone : " + data.phone);
}
db.close();
}
}
logcat
5-2. 데이터 수정하기
id가 1인 데이터를 수정해보겠습니다.
package com.fullspringwater.sqlitesample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.fullspringwater.sqlitesample.data.DatabaseHandler;
import com.fullspringwater.sqlitesample.model.Contact;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ArrayList<Contact> contactList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 디비에 저장하기
// 디비 핸들러 가져오기
// 데이터베이스에 넣고, 가져오는 것 테스트
DatabaseHandler db = new DatabaseHandler(MainActivity.this);
// // 컨택 객체 생성
Contact contact = new Contact(1, "김철수", "010-0000-0000");
//
// // 주소록 데이터를 업데이트하는 함수 호출
db.updateContact(contact);
// 주소록 데이터를 디비에서 가져와서, 로그 찍어보자
contactList = db.getAllContact();
for(Contact data : contactList){
Log.i("MyContact: ", "id : " + data.id +
", name : " + data.name + ", phone : " + data.phone);
}
db.close();
}
}
logcat
5-3. 데이터 삭제하기
id가 1인 데이터를 삭제해 보겠습니다.
package com.fullspringwater.sqlitesample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.fullspringwater.sqlitesample.data.DatabaseHandler;
import com.fullspringwater.sqlitesample.model.Contact;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ArrayList<Contact> contactList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 디비에 저장하기
// 디비 핸들러 가져오기
// 데이터베이스에 넣고, 가져오는 것 테스트
DatabaseHandler db = new DatabaseHandler(MainActivity.this);
// // 컨택 객체 생성
Contact contact = new Contact(1, "김철수", "010-0000-0000");
// // 주소록 데이터를 디비에서 삭제하는 함수 호출
db.deleteContact(contact);
// 주소록 데이터를 디비에서 가져와서, 로그 찍어보자
contactList = db.getAllContact();
for(Contact data : contactList){
Log.i("MyContact: ", "id : " + data.id +
", name : " + data.name + ", phone : " + data.phone);
}
db.close();
}
}
데이터가 없어 Logcat 생성이 되지 않습니다.
'Android' 카테고리의 다른 글
[Android] EditText 입력 이벤트 addTextChangedListener, TextWatcher (0) | 2022.07.18 |
---|---|
[Android] RecyclerView 와 Adapter 를 이용하여 리스트를 화면에 표시하는 방법 (0) | 2022.07.18 |
[Android] 데이터 저장, 불러오기 SharedPreferences (0) | 2022.07.13 |
[Android] 액티비티 간의 양방향 데이터 전달방법 (0) | 2022.07.13 |
[Android] 액티비티 간의 단방향 데이터 전달 방법. Serializable, putExtra(), getSerializableExtra() (0) | 2022.07.13 |