以前、DB周りを実装していた時にいろんなサイトを参考にしていたけど
SQLiteOpenHelper#onCreate()でbeginTransaction()しているサイトもあればやっていないサイトもある。
やらなくても特に怒られるわけじゃないけど、何か気持ち悪いから調べてみる。
まずはドキュメントのonCreate()をみてみる。
特にトランザクションについては書かれていない。
ついでにonUpgrade()も見てみる。
こっちにはトランザクション内で実行されてるって書かれてる。
したらonCreateはトランザクションする必要ありそう?
これでも気になるからソースを見てみる。
db.beginTransaction();
try {
if (version == 0) {
onCreate(db);
} else {
if (version > mNewVersion) {
onDowngrade(db, version, mNewVersion);
} else {
onUpgrade(db, version, mNewVersion);
}
}
db.setVersion(mNewVersion);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
Cross Reference: /frameworks/base/core/java/android/database/sqlite/SQLiteOpenHelper.java
onCreateしっかりトランザクションされてるじゃん!
なので、わざわざSQLiteDatabase#beginTransaction()する必要はないみたい。
逆にSQLiteDatabase#beginTransaction()していても特に怒られるわけじゃないけど、
既にやってくれてるなら書く必要はないよね。
というお話しでした。