SQLite:AUTOINCREMENTの現在値を取得

autoincrement

SQLiteはPostgresqlと違って、【currval】または【nextval】のようなメッソードが用意されてないため、オートインクリメントの現在値や次値を取得したい場合は、自分で実装しなければなりません。

事前にSQLiteのオートインクリメント仕組みを知っておきましょう!

  1. autoincrement情報は【SQLITE_SEQUENCE】に保存されている
  2. 【SQLITE_SEQUENCE】の必要なカラム名: name(対象テーブル名)+ seq(現在値)
  3. 同じテーブル内に一つのオートインクリメントしか宣言できない

下記メッソードで簡単に現在値を取得できます:

public void printAutoIncrements(){

    //DBの全てAUTOINCREMENTを取得
    String query = "SELECT * FROM SQLITE_SEQUENCE";

  //対処autoincrementの指定
    String myAutoIncrementTableName= "myTable";

  //Cursorでループ
    Cursor cursor = mDb.rawQuery(query, null);
    if (cursor.moveToFirst()){

        do{
            String curTable= cursor.getString(cursor.getColumnIndex("name")));
	    String curId= cursor.getString(cursor.getColumnIndex("seq")));

	//指定されたテーブルでしたら、値を出力
	if(curTable.equals(myAutoIncrementTableName)){
		Debug.d("DEBUG", "現在値="+curId);
		break;
	}

        }while (cursor.moveToNext());
    }

    cursor.close(); 

}

以上

by Johann

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中