태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
2019.01.10 16:29


[android] SQLiteDatabase 와 SQLiteOpenHelper Test


begintransaction, begintransaction exclusivelock, begintransaction lock, close 된 db, db file delete, endtransaction, exclusive lock, getreadabledatabase, getwritabledatabase, illegalstateexception, onCreate, setTransactionSuccessful, sqliteopenhelper, [android] SQLiteDatabase 와 SQLiteOpenHelper Test


-

DB File delete 를 수행한 다음 getWritableDatabase 나 getReadableDatabase 를 호출하면 SQLiteOpenHelper 의 onCreate 가 재수행된다. (DB file 의 실 존재 유무를 확인한다는 얘기렸다?)



-

이미 Close 된 DB 에 뭔가를 수행하려 한다면 아래와 같은 IllegalStateException 이 발생한다

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/com.ck.prodtest/databases/myDB



-

beginTransaction 을 수행한 후 안쪽에서 CUD Operation 을 하고 R(query) 를 수행하면 반영된 내용이 보여진다.

setTransactionSuccessful 을 수행하지 않고 endTransaction 을 하면 beginTransaction 을 수행한 후 수행한 operation 이 초기화가 된다.

( beginTransaction 후에 다른 thread 에서 R 을 하지 않은 이유는 바로 아래에.. )



-

안드로이드에서 beginTransaction 은 Exclusive Lock 을 잡기 때문에


Thread1                                    Thread2

beginTransaction

                                                 beginTransaction // wait 한다


endTransaction

                                                 // wait 가 풀리고 Lock 이 잡힌다.



-

안드로이드에서 beginTransaction 은 Exclusive Lock 을 잡기 때문에, beginTransaction 이 시작되면 다른 thread 에서의 write 뿐만 아니라 read operation 역시도 모두 hold 된다.


더보기



댓글을 달아 주세요


Posted by 돼지왕왕돼지