現在、テーブルにデータを挿入しようとするトランザクションがあります。データが既にテーブルにある場合、制約エラーが発生し、selectを実行してIDを取得します。selectが0行を返した場合データを挿入する
t2.executeSql('INSERT INTO books (book) VALUES (?);',
[record],
function (t2, r) { // SQL_successfulCallback
record = r.insertId;
},
function (t2, err) { // SQL_errorCallback
if (err.message !== 'constraint failed') { // insert failed because of other
// reason - fail transaction
console.log('Insert SQL error ' + err.code + ' - ' + err.message + '.');
return true;
} else { // insert failed because data was already in the table
t2.executeSql('SELECT bookID FROM books WHERE book=?',
[record],
function (t, r) { // SQL_successfulCallback
record = r.rows.item(0).classificationID;
},
function (t, err) { // SQL_errorCallback
console.log('Lookup SQL error ' + err.code + ' - ' + err.message + '.');
return true;
}
);
return false;
}
}
);
トランザクションを高速化して、データが最初にテーブルにあるかどうかを確認したいと考えました。それ以外の場合は挿入してください。
t2.executeSql('SELECT bookID FROM books WHERE book=?',
[record],
function (t2, r) { // SQL_successfulCallback
if (r.rows.length !== 0) {
record = r.rows.item(0).bookID;
} else {
t2.executeSql('INSERT INTO books (book) VALUES (?);',
[record],
function(t2, r){ // SQL_successfulCallbac
record = r.insertId;
},
function (t2, err) { // SQL_errorCallback
if (err.message !== 'constraint failed') { // insert failed because of other
// reason - fail transaction
console.log('Insert SQL error ' + err.code + ' - ' + err.message + '.');
return true;
} else { // insert failed because data was already in the table
return false;
}
}
);
}
},
function (t, err) { // SQL_errorCallback
console.log('Lookup SQL error ' + err.code + ' - ' + err.message + '.');
return true;
}
);
...しかし動作しません。このトランザクションはすべての選択を実行し、次に挿入を行います。 2番目の方法はどのように動作させることができますか?
**方法2をしないでください!**方法1は28,439レコードで22秒かかります。方法2は、Michaelが提案したトランザクションラッパーを使用して、同じ数のレコードに対して_34秒を要します。 – DataZombies
レコードを一度に挿入する方法と、データをどのように入力するのか。私は、ユーザーが一度にいくつかのレコードを入力していたと仮定していたのですが、これは一度に28,439レコードを挿入しているのでしょうか? –
データはJSONファイルから取得されています。挿入する代わりに、テーブルの一意の値を保持するためにメモリ内に配列を作成し、その小さな配列を使用して挿入を行います。 – DataZombies