AUTO_INCREMENT で生成した値は、MySQL は、LAST_INSERT_ID() で取得するが、
SQLite では、LAST_INSERT_ROWID() である。
だから、Android の SQLite でこれを利用しようと最初に思いつくのは、、
SQLiteDatabase の insert メソッド実行直後に、
Cursor c = sqLiteDatabase.rawQuery("SELECT LAST_INSERT_ROWID()", null);
if (c != null && c.moveToFirst()){
long last_id = c.getLong(0);
}
という方法であろう。。
でも、SQLiteDatabase の insert の API-DOC にちゃんと戻り値は、
the row ID of the newly inserted row, or -1 if an error occurred
と書いてあるので、
long last_id = db.insert("employees",null,values);
でも取得できるので、わざわざ rawQuery で Cursor 取得してなんて書かなくても
戻り値で取得可能である。
LAST_INSERT_ID を取得しなければならないケースは、多くの経験から INSERT したテーブルの
レコードを参照する別のテーブルのレコードを作る場合がほとんどのパターンで
Android で、上の方法にまだ抵抗があり、
結局、、、1つのトランザクションの中で、
SQLiteDatabase の insert を実行直後に、
sqLiteDatabase.execSQL("INSERT INTO foo (employee_id, ... ) VALUES( LAST_INSERT_ROWID() , .... )", new Object[]{ .... });
のように、
参照テーブル INSERT SQL で、 LAST_INSERT_ROWID() を直接記述してしまう。