마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

db 활용 질문있습니다.

0 추천
현재 날짜 값을 date로 가져와서 date 값과 어떠한 이벤트를 저장하고

DB에 insert 후 만약 같은 날짜에 다른 이벤트로 변경하여 저장하려면 insert가 아닌 update해서

기존 date에 딸린 데이터 값들만 바꾸려면 어떻게 해야할까요?
enerigpy (2,110 포인트) 님이 2023년 4월 17일 질문

2개의 답변

0 추천
 
채택된 답변
저는 질문 주신 것부터 이해가 안되기는 하는데 나름 이해한 내용 기준으로 말씀드리겠습니다

 

이해한 내용

1. 현재 날짜 값과 이벤트 관련 정보를 담은 data 값이 있다

2. 해당 data를 insert 한 뒤, 다음에 동일한 날짜에 이벤트 값이 있으면

날짜값 이외의 값들만 update 하고 싶다

--------------------------------------------------

update하기 위해 방법 (해당 날짜에 이미 이벤트 정보가 있다는 가정하에)

1. 해당 날짜 이벤트 정보의 PK값( id )을 가져온다

2. Where문에 PK(id)값에 해당하는 정보에 update문을 실행한다.
비뢰광 (7,400 포인트) 님이 2023년 4월 18일 답변
enerigpy님이 2023년 4월 19일 채택됨
db.insert(date, event1, ...)
이렇게 하였고
db.update(date, event1, ...) 이렇게 하려고 할시
PK값이라는게 어떤식으로 불러오는 건지 궁금하네요
0 추천

질문을 하실 때 질문과 관련된 정보도 같이 제공하시면 질문을 이해하기가 쉬울 것 같습니다. 예를 들면 관련 클래스와 예제 데이터, 테이블 구조 등을 같이 올리시면 답을 주시는 분들이 특정 부분을 찝어서 답을 주기가 쉬운데, 그렇지 않으면 질문이 너무 광법위 해져서 답을 하기가 어려워 집니다

먼저 님이 작성하신 PK(Primary Key)가 뭔지는 아신다고 가정하고 evetn데이터에 PK 설정을 어떻게 하셨는지에 따라 처리방법이 달라집니다. PK를 님이 직접 저장할 수도 있고, 자동증가 필드처럼 DB에서 알아서 생성할 수도 있습니다. 

님이 직접 PK를 생성했다면, PK를 이미 알고 계시니 문제될 게 없고, DB가 자동 생성했다면, 아래 SQL을 통해서 마지막 저장된 ID를 가져올 수 있습니다.

SELECT last_insert_rowid()

 

그리고 select를 했다면, 반환된 커서에 PK 필드가 들어 있으므로, 이 경우도 문제될 것이 없겠구요.

제 답글에서 보면 아시겠지만, 질문 시에 필요한 기본정보가 많이 빠져있어서, 답변에 가능한 경우의 수를 생각해서 답을 해야하는 어려움이 생깁니다. 이 질문은 단순한 편이라 큰 문제는 없지만요.

spark (227,470 포인트) 님이 2023년 4월 18일 답변
public insertData(String date, Integer 이벤트1, Integer 이벤트2, ..)
이렇게 하고 있습니다. primary key는 따로 지정하진 않았는데 가능할까요?
db를 사용하는데 pk값(primary key) 설정을 안 하시면..;;;
pk값이 왜 필요한지는 한번 검색해서 확인해 보시기 바랍니다

일단 질문자님 말씀하셨던 내용 기준으로 보면 날짜 값을 PK 값으로
생각할 수 있으니 다시 답변 올리겠습니다
테이블명, 컬럼명은 어떤지 몰라서 임의로 정의했습니다

- update하기 위한 방법 (해당 날짜에 이미 이벤트 정보가 있다는 가정하에)
db.update("aTable", ContentValues, "mDate = ?", new String[]{"2023-04-19"});

ContentValues에는 mDate 날짜에 해당되는 값은 없어야 하겠죠?
테이블에 PK부터 만드세요. Db테이블 만들때 PK는 필수 적이고 경우에 따라서 인덱스도 추가해 주는 것이 성능향상에 많은 영향을 줍니다. 님의 경우는 이벤트 ID가 PK가 되는 것이 합리적일 것 같은데, 그건 님의 상황에 따라 달라질 수 있겠네요 PK를 어떤 걸로 할지 모르겠다면 자동 증가필드를 사용하세요. SQLite는 자동증가 필드를 기봄작으로 사용하는 것으로 압니다.
더 자세한 내용은 필요한 정보를 공유 하지 않으셔서 말씀드리기가 어렵네요.
...