読者です 読者をやめる 読者になる 読者になる

Sqliteのauto increment last_insert_rowid で直前で保存したデータを取得する

Web SQL Database monaca AngularJS
開発環境


オートインクリメントで登録したIDの値を
last_insert_rowid で取得したかった。

table:category
--
id   | autoincrement
name | text
--


INSERT した executeSql() の success callback から
ROWID = last_insert_rowid() を取得すると、ループの最後の値しか取得されない。

angular.forEach( Object, function(obj) {
  db.transaction( function(tx){
    tx.executeSql('INSERT INTO category ( name ) VALUES (?)', [ "小説" ] );
    tx.executeSql('SELECT * FROM questions where ROWID = last_insert_rowid()', [],
      function(tx, res){
        var category_id = res.rows.item(0).id;
        tx.executeSql('INSERT INTO books ( category_id, name ) VALUES (?, ?)', [ category_id, "白夜行" ] );
      }
    );
  });
});


INSERT した executeSql() はcallbackを取得しない。
次の SELECT文 executeSql() で callbackから
ROWID = last_insert_rowid() で取得するとうまくいく。

angular.forEach( Object, function(obj) {
  db.transaction(function(tx){
    tx.executeSql('INSERT INTO category ( name ) VALUES (?)', [ "小説" ] );
    tx.executeSql('SELECT * FROM questions where ROWID = last_insert_rowid()', [],
      function(tx, res){
        var category_id = res.rows.item(0).id;
        tx.executeSql('INSERT INTO books ( category_id, name ) VALUES (?, ?)', [ category_id, "白夜行" ] );
      }
    );
  });
});
参考:

データベースの利用方法 - Monaca Docsデータベースの利用方法 - Monaca Docs