수원통학러
528
2020-01-13 14:51:46
3
236

안드로이드 room update문


코틀린 + room 써서 해당과같이했습니다

 1. DBManager.getInstance(applicationContext)?.query("UPDATE pk01 SET status ='전송' WHERE status='미전송'", null)

2. DBManager.getInstance(applicationContext)?.Pk01Dao()?.update(
       Pk01Entity(
       iv_no = cursor.getString(0),
       status = "전송"
      )
}
재질문합니다 room 사용해서 update하는데 디버깅하면 update문 찍힙니다.. 근데 에러도 안뱉고 trycatch로해도 익셉션없고 한데 앱이죽지도않고 멈추지도않고 그냥 update가 안됩니다 1,2번처럼 이렇게 쿼리문도 써보고 dao.update도 해봤는데 제가 틀리게쓰고있는건가요.. insert select다되는데 얘는안되네요

0
0
  • 답변 3

  • galois
    163
    2020-01-13 15:41:52 작성 2020-01-13 15:43:34 수정됨

    UPDATE 조건에 맞는 ROW 가 있는지 확인해보셨나요?

    코드를 봐서는 그럴일은 없겠지만 Typeconverter 문제일 수 도 있습니다.

    아니면 NULL 을 넣으시니깐, TABLE이 NOT NULL 로 생성되지 않았나 확인해보셔야할 것 같습니다.

    ROOM에서 TABLE을 직접생성하면 기본으로 NOT NULL이 들어가더라구요

    정 안 되면 encoding 같은것도 체크해보셔야할 것 같습니다. ROOM 쓰시는 방법이 저랑 다르셔서 확신은 안 가지만 2에서 호출하시는 cursor 때문일 수 도 있을 것 같은데, TRANSACTION ISOLATION 때문일 수도 있을 것 같기도하고...  저도 ROOM 이 Exception을 안 던져서 디버깅하기 힘들었었는데

    디버깅 하시면서 해당 부분에 브릭포인트 걸어놓고 거기에 디버거 올라갔을 때, android studio 에서 alt + f8(단축키가 다르시다면 evaluation 메뉴) 에서 해당 호출문을 expression 해보면 exception이 나오더라구요 저 같은 경우엔 그런 방법으로 typeconvert 오류를 잡았었습니다.

    0
  • 수원통학러
    528
    2020-01-13 16:17:00

     galois

    브레이크 포인트걸고 try catch해서 catch에다가도 걸어봤는데 익셉션이안나더라구요..

    만약 not null로 생성되면 저기에 null대신 무엇을 넣어야되나요 그냥 not null 쓰면 되나요

    0
  • galois
    163
    2020-01-13 16:58:00 작성 2020-01-13 16:58:38 수정됨

    아뇨 자료형에 맞는 초기값을 넣으셔야죠 

    테이블을 NOT NULL DEFAULT <초기값> 이렇게 ALTER하셔야합니다

    저도 익셉션 안 잡혀서 evaluation 해보았더니 그제서야 잡혔습니다. 

    그리고 AsyncTask 안쓰시는 이유가잇나요?

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.