WebSQL передает значения в качестве параметра

Я использую Phonegap и следую инструкциям на их сайте, но он дает мне эту функцию.

function populateDB(tx) {
 tx.executeSql('DROP TABLE IF EXISTS DEMO');
 tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
 tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

function successCB() {
    alert("success!");
}

var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(populateDB, errorCB, successCB);

Но как мне передать туда значения в качестве параметра? Можно ли сделать что-то подобное?

function populateDB(tx, values) {
 tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
 tx.executeSql('INSERT INTO DEMO (id, data) VALUES (values['id'], values['data'])');
}

var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(populateDB(values), errorCB, successCB);

Я видел, что можно работать с вопросительными знаками, но я не могу найти четкого руководства по этому поводу.


person Sinan Samet    schedule 02.05.2014    source источник
comment
Мой ответ дал решение?   -  person Ross    schedule 06.05.2014


Ответы (1)


Я думаю, это то, что вам нужно -

var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
var insertValues = {
    values1: [1, 'First row'],
    values2: [2, 'Second row']
};

doInserts(insertValues);

function doInserts(insertValues) {
    db.transaction(function(tx) {
        tx.executeSql('DROP TABLE IF EXISTS DEMO');
        tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
        tx.executeSql(
            'INSERT INTO DEMO (id, data) VALUES (?, ?)', 
            insertValues.values1,
            insertSuccess,
            insertFail
        );
        tx.executeSql(
            'INSERT INTO DEMO (id, data) VALUES (?, ?)',
            insertValues.values2,
            insertSuccess,
            insertFail
        );
    });
}

function insertSuccess() {
    console.log('insert success');
}

function insertFail(err) {
    console.log('insertFail, err.message: ' + err.message);
}

Этот материал асинхронный, поэтому, если вы хотите знать, когда все ваши вставки будут завершены, один трюк, который работает, -

  1. Подсчитайте количество вставок, которые вы ожидаете сделать, и сохраните его в переменной.
  2. Когда вставка выполнена успешно, уменьшите на 1 переменную, хранящую ожидаемое количество вставок.
  3. Когда переменная, содержащая ожидаемое количество вставок, равна 0, вы знаете, что все ваши вставки завершены.
person Ross    schedule 02.05.2014
comment
Это не совсем то, что я искал, извините. Я имел в виду передачу значений в функцию типа populateDB(tx, values) - person Sinan Samet; 07.05.2014
comment
@SinanSamet Я обновил ответ, дайте мне знать, если вы этого хотите. - person Ross; 07.05.2014