Firebase_FirestoreDB_insert_selectAll

소정·2023년 3월 17일
0

Android_with_Java

목록 보기
32/33
post-thumbnail

NoSQL : Not only SQL

  • 가지치기 방식으로 뻗어 나가는 느낌
  • 연결성이 더 좋아짐
  • 빅데이터에 용이함
  • 비정형, 노드 연결 방식
    collection > document > filde
  • 내부는 json문자열로 저장됨

RDBS
서로 연관된 표의 느낌

FirestoreDB

1.우선 FirestoreDB를 사용하기 위한 설정 & FirestoreDB SDK 추가

  1. 데이터베이스 만들고 규칙 정하기

FirestoreDB to insert

사용순서

  1. 값 준비
  2. Firestore DB에 저장
    • 식별자와 값을 같이 저장해야함 : Map 단위로 저장
  3. Person이라는 이름의 컬렉션(테이블이름)을 생성 or 참조하는 참조객체 소환
  4. Field값들을 Map으로 준비
  5. personRef 참조 컬렉션에 값을 넣기
    • 도큐먼트 부터 써야함

personRef.document().set(person)
document() : ()안에 빈값을 보내면 랜덤값으로 만들어짐
단점 : 순서가 abc순서라 등록순서 뒤바뀔 수 있음
순서대로 넣으려면 날짜 이용!!

personRef.document().set(person) 축약 버전 : .add()
personRef.add(person)

main.java

package com.bsj0420.ex89firebasefirestoredb;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import com.bsj0420.ex89firebasefirestoredb.databinding.ActivityMainBinding;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.btnSave.setOnClickListener(view -> clickSave());
        binding.btnLoad.setOnClickListener(view -> clickLoad());

    }

    private void clickSave() {

        //1. 값 준비
        String name = binding.etName.getText().toString();
        int age = Integer.parseInt(binding.etAge.getText().toString());
        String address = binding.etAddr.getText().toString();

        //2. Firestore DB에 저장
        // 식별자와 값을 같이 저장해야함 : Map 단위로 저장
        FirebaseFirestore firestore = FirebaseFirestore.getInstance(); //최상위
        
        //3. Person이라는 이름의 컬렉션(테이블이름)을 생성 or 참조하는 참조객체 소환
        CollectionReference personRef = firestore.collection("Person"); 
        //없으면 만들고 있으면 참조함
        
        //4. Field값들을 Map으로 준비
        Map<String, Object> person = new HashMap<>();
        //식별자는 글씨, 값은 아무나~

        person.put("name",name);
        person.put("age",age);
        person.put("address",address);
        
        //5. personRef 참조 컬렉션에 값을 넣기
        //5-1) 도큐먼트 부터 써야함***
        //document() : ()안에 빈값을 보내면 랜덤값으로 만들어짐
        // 단점 : 순서가 abc순서라 등록순서 뒤바뀔 수 있음
        // 순서대로 넣으려면 날짜 이용!!
//        personRef.document().set(person).addOnSuccessListener(unused -> {
//            Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show();
//        });
        
        //personRef.document().set(person) 축약 버전 : .add()
        personRef.add(person).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Toast.makeText(MainActivity.this, "saved", Toast.LENGTH_SHORT).show();
            }
        });


    }
}

FirestoreDB fome select

사용순서

  1. FirebaseFirestore 부르기
  2. CollectionReference으로 커서 이동
  3. 값 꺼내오기

.get() : 모든 데이타
.whereEqualTo(필드, 값)


데이터를 가져오라고 하면 FirebaseFirestore은 실시간이기 때문에 부를떄 스냅샷을 찍음


main.java

package com.bsj0420.ex89firebasefirestoredb;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import com.bsj0420.ex89firebasefirestoredb.databinding.ActivityMainBinding;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.btnSave.setOnClickListener(view -> clickSave());
        binding.btnLoad.setOnClickListener(view -> clickLoad());

    }

    private void clickLoad() {
        //1. FirebaseFirestore 부르기
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();

        //2. CollectionReference으로 커서 이동
        CollectionReference personRef = firestore.collection("person");

        //3. get()하면 갖고 있는 거 다 튀어 나옴
        //데이터를 가져오라고 하면 FirebaseFirestore은 실시간이기 때문에 부를떄 스냅샷을 찍음
        
        personRef.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                //collection 안에 여러개의 Document가 있어서 반복문 돌려야함
                StringBuffer buffer = new StringBuffer();
                for( QueryDocumentSnapshot snapshot : queryDocumentSnapshots ){
                    //(요소 하나 임시 저장 변수: 값 가진 배열)

                    Map<String, Object> person = snapshot.getData();
                    String name = person.get("name").toString();
                    int age = Integer.parseInt(person.get("age").toString());
                    String address = person.get("address").toString();

                    buffer.append(name + " : " + age + " : " + address);
                }

                binding.tv.setText(buffer.toString());
            }
        });

        //** 별외 특정 필드값에 해당하는 데이터 검색하고 싶다면
        personRef.get(); // 이건 모든 데이타
        personRef.whereEqualTo("name", "리사").addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {

            }
        });
    }
}
profile
보조기억장치

0개의 댓글