1. 안드르외드에서의 DataBase
1) SQLite
- 안드로이드와 iOS를 비롯한 많은 모바일 장치에서 사용되는 DataBase
- SQL을 거의 완전하게 지원
2) SQLite에서 DataBase 구축
- 1단계
- DBMS 설치 (이미 설치됨)
- 2단계
- DB 생성
- 데이터 입력
- 데이터 조회, 활용
- 3단계
- 앱에서 구축된 데이터 활용
2. SQLite 프로그래밍
1) SQLiteOpenHelper 클래스(상속받아 재정의)
- 생성자 : DB 생성
- onCreate() : 테이블 생성, 초기 데이터를 생성함
- onUpgrade() : DB 업그레이드 함
2) SQLiteDatabase 클래스
- SQL문 실행
- execSQL() : SQL문 실행 (Insert/Update/Delete)
- close() : DB 닫기
- query(), rawQuery() : Select 실행 후 커서반환
3) Cursor 인터페이스
- 쿼리의 조건을 만족하는 레코드들의 집합이 결과 집합(result set)임
- 결과 집합에서 사용자는 커서를 사용하여 한 번에 한 레코드씩 데이터에 접근가능
- 커서 이동
- 행번호
move(int offset)
moveToFirst() : 커서의 첫 행으로 이동
moveToNext() : 현재 커서의 다음 행으로 이동
moveToLast() : 커서의 마지막 행으로 이동
- 열번호
getcolumnIndex()
getcolumnCount()
getcolumnNames()
getCount()
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이름 : "
android:textSize="20dp"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edtName"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="인원 : "
android:textSize="20dp"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edtNumber"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/btnInit"
android:text="초기화"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/btnInsert"
android:text="입력"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/btnSelect"
android:text="조회"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/btnUpdate"
android:text="수정"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/btnDelete"
android:text="삭제"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8"
android:orientation="horizontal">
<EditText
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/edtNameResult"
android:background="#FF7000"
android:padding="20dp"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/edtNumberResult"
android:background="#FF7000"
android:padding="20dp"/>
</LinearLayout>
</LinearLayout>
package kr.co.sgm;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/*
<수정>과 <삭제> 기능을 추가하시오.
- 수정
- '이름'에 이름과 '인원'에 변경된 인원을 입력한 후 <수정> 클릭하면 해당 그룹이름의 인원이 변경된다.
- 삭제
- '이름'에 이름을 입력하고 <삭제>를 클릭하면 해당 그룹이 삭제된다.
- <입력>, <수정>, <삭제>를 클릭하면 그 결과가 즉시 화면에 출력된다.
*/
public class MainActivity extends AppCompatActivity {
MyDBHelper myDBHelper;
EditText edtName, edtNumber, edtNameResult, edtNumberResult;
Button btnInit, btnInsert, btnSelect, btnUpdate, btnDelete;
SQLiteDatabase sqLiteDatabase;
public class MyDBHelper extends SQLiteOpenHelper {
public MyDBHelper(Context context) {
super(context, "groupDB.db", null, 1);
}
// 데이터베이스가 처음 생성될때 호출됨
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//테이블 생성하는 기능
sqLiteDatabase.execSQL("CREATE TABLE groupTB (gName CHAR(20) PRIMARY KEY, gNumber INTEGER);");
}
// 데이터베이스가 업그레이드될 필요가 있을 때 호출됨
// DB 버전이 올라가면 호출됨 (기존 테이블을 삭제하고 새로 만들어줌)
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
// 테이블을 삭제한 후 다시 생성
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS groupTB");
onCreate(sqLiteDatabase);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);
setTitle("가수 그룹 관리 앱");
edtName = findViewById(R.id.edtName);
edtNumber = findViewById(R.id.edtNumber);
edtNameResult =findViewById(R.id.edtNameResult);
edtNumberResult = findViewById(R.id.edtNumberResult);
btnInit = findViewById(R.id.btnInit);
btnInsert = findViewById(R.id.btnInsert);
btnSelect = findViewById(R.id.btnSelect);
btnUpdate = findViewById(R.id.btnUpdate);
btnDelete = findViewById(R.id.btnDelete);
// 액티비티에서는 먼저 SQLiteOpenHelper 객체를 생성함.
myDBHelper = new MyDBHelper(this);
btnInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sqLiteDatabase = myDBHelper.getWritableDatabase();
myDBHelper.onUpgrade(sqLiteDatabase, 1,2);
sqLiteDatabase.close();
}
});
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//DB가 필요하면 호출
//=> SQLiteDatabase 객체 반환 (DB)
sqLiteDatabase = myDBHelper.getWritableDatabase();
sqLiteDatabase.execSQL("INSERT INTO groupTB VALUES ( '"
+ edtName.getText().toString() + "', "
+ edtNumber.getText().toString() + ");");
sqLiteDatabase.close();
Toast.makeText(getApplicationContext(), "데이터 입력됨", Toast.LENGTH_SHORT).show();
btnSelect.callOnClick(); // onClickListener 이벤트 호출
}
});
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sqLiteDatabase = myDBHelper.getReadableDatabase();
Cursor cursor;
// 쿼리의 결과가 커서로 반환됨.
cursor = sqLiteDatabase.rawQuery("SELECT * FROM groupTB;", null);
String strNames = "그룹이름" +"\r\n"+ "------------------" +"\r\n";
String strNumbers = "인원" +"\r\n"+ "---------" +"\r\n";
while (cursor.moveToNext()) {
strNames += cursor.getString(0) + "\r\n";
strNumbers += cursor.getString(1) + "\r\n";
}
edtNameResult.setText(strNames);
edtNumberResult.setText(strNumbers);
cursor.close();
sqLiteDatabase.close();
}
});
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sqLiteDatabase = myDBHelper.getWritableDatabase();
if(edtName.getText().toString() != ""){
sqLiteDatabase.execSQL("DELETE FROM groupTB " +
"WHERE gName = '" +edtName.getText().toString()+"';");
}
sqLiteDatabase.close();
Toast.makeText(getApplicationContext(), "데이터 삭제됨", Toast.LENGTH_SHORT).show();
btnSelect.callOnClick();
}
});
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sqLiteDatabase = myDBHelper.getWritableDatabase();
if (edtName.getText().toString() !=""){
sqLiteDatabase.execSQL("UPDATE groupTB SET gNumber = "
+ edtNumber.getText()+ " WHERE gName = '"
+ edtName.getText().toString() +"';");
}
sqLiteDatabase.close();
Toast.makeText(getApplicationContext(), "데이터 수정됨", Toast.LENGTH_SHORT).show();
btnSelect.callOnClick();
}
});
}
}
[결과 출력]
'App > Android Java' 카테고리의 다른 글
Android_Java(29) - ThreadBasic (1) | 2022.02.15 |
---|---|
Android_Java(28) - AudioPlay (0) | 2022.02.15 |
Android_Java(26) - GalleryApp (0) | 2022.02.14 |
Android_Java(25) - MyGridView (0) | 2022.02.14 |
Android_Java(24) - MovieCustomListView(2) (0) | 2022.02.14 |
댓글