본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] SQLiteDatabase 와 SQLiteOpenHelper Test

by 돼지왕 왕돼지 2019. 1. 10.
반응형

[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 된다.




반응형

댓글