이번 글에서는 이전 글 "안드로이드 DB(데이터베이스) 생성" 이후의 내용입니다.
2019/04/21 - [Android] - 안드로이드 DB(데이터베이스) 생성
이전 글에서 데이터베이스 파일을 생성하였다면 이제 그 데이터베이스 파일에 데이터를 추가하고 삭제하는 방법을 알아보겠습니다.
/* 실행 결과 */
이전 글에 이어서 작성하는 것으로, 메인 자바 외에 DBHelper나 레이아웃(. xml) 파일은 이전 글에서 확인해 주세요.
/* 메인 레이아웃(activity_main.xml) */
package com.tistory.godog.dbtest;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText editText, editText2;
ListView listView, listView2;
DBHelper dbHelper;
SQLiteDatabase db = null;
Cursor cursor;
ArrayAdapter adapter, adapter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
editText2 = findViewById(R.id.editText2);
listView = findViewById(R.id.listView);
listView2 = findViewById(R.id.listView2);
dbHelper = new DBHelper(this, 4);
db = dbHelper.getWritableDatabase(); // 읽기/쓰기 모드로 데이터베이스를 오픈
}
public void listUpdate(View v) {
cursor = db.rawQuery("SELECT * FROM tableName", null);
startManagingCursor(cursor); //엑티비티의 생명주기와 커서의 생명주기를 같게 한다.
adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1);
adapter2 = new ArrayAdapter(this,
android.R.layout.simple_list_item_1);
while (cursor.moveToNext()) {
adapter.add(cursor.getString(0));
adapter2.add(cursor.getString(1));
}
/*
cursor.moveToFirst();
cursor.moveToPrevious();
cursor.moveToPosition(2);
*/
listView.setAdapter(adapter);
listView2.setAdapter(adapter2);
}
public void insert(View v) {
String name = editText.getText().toString();
String info = editText2.getText().toString();
db.execSQL("INSERT INTO tableName VALUES ('" + name + "', '" + info + "');");
Toast.makeText(getApplicationContext(), "추가 성공", Toast.LENGTH_SHORT).show();
editText.setText("");
editText2.setText("");
}
public void delete(View v) {
String name = editText.getText().toString();
db.execSQL("DELETE FROM tableName WHERE name = '" + name + "';");
}
}
이전 과 달리 insert, delete, listUpdate 함수들이 추가되었다.
이들은 각각 버튼 '추가' '삭제' 'UPDATE'를 클릭하였을 때 실행된다.
insert 함수와 delete 함수를 보면 정작 데이터베이스의 데이터를 추가, 삭제하기 위해서 실행하는 문은 db.execSQL 한 줄이면 된다.
- insert 함수
db.execSQL("INSERT INTO tableName VALUES ('" + name + "', '" + info + "');");
execSQL은 SQL문을 실행시켜주는 기능을 한다.
위 문장은 tableName 테이블의 (name, info) Values를 insert(삽입) 한다는 의미이다.
여기서 tableName 테이블의 이름으로 이는 저번 테이블을 CREATE(생성) 할 때 정한 테이블의 이름이다. 그러니 테이블을 생성할 때 의미의 맞게 테이블의 이름을 준 후 사용하면 된다.
※ ""(큰 따옴표), ''(작은 따옴표)을 어찌 사용해야 할지 혼란스러운 분들을 위해 간단한 팁을 드리자면 ""(큰 따옴표)는 안드로이드(자바)에서 사용되는 것이고, ''(작은따옴표)는 SQL문에서 사용되는 것이라 생각하면 편하다.
위 문을 예로 들면 ""(큰 따옴표)만을 이어보면
"INSERT INTO tableName VALUES ('name', 'info');" 같은 문이 된다.
이 SQL문을 실행하는 것인데, 여기서 name과 info가 ''(작은따옴표)의 감싸 져 있는데 이들이 저장될 변수명 들이기 때문이다.
그러면 위 코드에서 ""(큰 따옴표)로 나눈 것도 name과 info가 변수명이기 때문이라는 것을 알 수 있다. 그러니 이는 평소 변수들을 문자열로 출력할 때처럼 +로 이어준 것뿐이라는 것이다.
정 어렵다면 우선 위 "INSERT INTO tableName VALUES ('name', 'info');"처럼 SQL문을 먼저 작성해본 후 여기서 변수만을 ""로 안 감싸도록 분리해서 한 문자열로 만들도록 하면 쉬울 것이다.
- delete 함수
db.execSQL("DELETE FROM tableName WHERE name = '" + name + "';");
delete 함수도 insert 함수랑 마찬가지이다.
단, SQL문에서 DELETE를 사용하여 삭제해준다. 그리고 WHERE은 if문 같은 것으로
조건은 name ='name'; 으로 editText1에서 name을 적은 후 삭제 버튼을 클릭하면 이미 기존 테이블에 저장되어 있는 name 데이터와 같은 것이 있으면 삭제되도록 한다.
- listUpdate 함수
여기서는 rawQuery 메서드를 사용하는데 SELECT 명령을 사용하기 위해서는 execSQL이 아닌 rawQuery를 사용해야만 한다.
rawQuery는 리턴 값으로는 Cursor 객체를 주며 이는 행을 가리키게 된다.
name | info |
aa | 123 |
bb | 234 |
↓ getString(0) ↓getString(1)
cursor->
cursor는 행을 가리키므로 cursor를 아래로 이동[movoToNext()]을 while문으로 돌리고
cursor.getString(0) 는 cursor가 가리키는 행에서 첫 번째 열(name 열) 데이터를 가져오고
마찬가지로 cursor.getString(1) 는 cursor는 두 번째 열(info 열) 데이터를 가져온다.
그리고 이를 리스트 어뎁터의 추가하여 리스트 뷰로 출력하도록 만든 것이다.
여기서는 rawQuery와 Cursor 객체를 사용하여서 데이터베이스에서 데이터들을 가져오는 방법을 이해하였다면 된다.
'Android' 카테고리의 다른 글
안드로이드 스튜디오 자동 import 설정 (0) | 2019.05.15 |
---|---|
안드로이드 난독화 (0) | 2019.05.14 |
안드로이드 DB(데이터베이스) onUpgrade (0) | 2019.04.21 |
안드로이드 DB(데이터베이스) 생성 (0) | 2019.04.21 |
안드로이드 리사이클러뷰(RecyclerView) 사용법 (2) (0) | 2019.04.14 |