Получение идентификатора последней вставки с помощью SQLite.NET на C #

Основная проблема с использованием this вместо prototype состоит в том, что при переопределении метода конструктор базового класса будет по-прежнему ссылаться на переопределенный метод. Подумайте над этим:

BaseClass = function() {
    var text = null;

    this.setText = function(value) {
        text = value + " BaseClass!";
    };

    this.getText = function() {
        return text;
    };

    this.setText("Hello"); // This always calls BaseClass.setText()
};

SubClass = function() {
    // setText is not overridden yet,
    // so the constructor calls the superclass' method
    BaseClass.call(this);

    // Keeping a reference to the superclass' method
    var super_setText = this.setText;
    // Overriding
    this.setText = function(value) {
        super_setText.call(this, "SubClass says: " + value);
    };
};
SubClass.prototype = new BaseClass();

var subClass = new SubClass();
console.log(subClass.getText()); // Hello BaseClass!

subClass.setText("Hello"); // setText is already overridden
console.log(subClass.getText()); // SubClass says: Hello BaseClass!

против:

BaseClass = function() {
    this.setText("Hello"); // This calls the overridden method
};

BaseClass.prototype.setText = function(value) {
    this.text = value + " BaseClass!";
};

BaseClass.prototype.getText = function() {
    return this.text;
};

SubClass = function() {
    // setText is already overridden, so this works as expected
    BaseClass.call(this);
};
SubClass.prototype = new BaseClass();

SubClass.prototype.setText = function(value) {
    BaseClass.prototype.setText.call(this, "SubClass says: " + value);
};

var subClass = new SubClass();
console.log(subClass.getText()); // SubClass says: Hello BaseClass!

Если вы считаете, что это не проблема, то это зависит от того, можете ли вы жить без личных переменных, и достаточно ли у вас опыта) знать утечку, когда вы видите один. Кроме того, неудобно помещать логику конструктора после определения метода.

var A = function (param1) {
    var privateVar = null; // Private variable

    // Calling this.setPrivateVar(param1) here would be an error

    this.setPrivateVar = function (value) {
        privateVar = value;
        console.log("setPrivateVar value set to: " + value);

        // param1 is still here, possible memory leak
        console.log("setPrivateVar has param1: " + param1);
    };

    // The constructor logic starts here possibly after
    // many lines of code that define methods

    this.setPrivateVar(param1); // This is valid
};

var a = new A(0);
// setPrivateVar value set to: 0
// setPrivateVar has param1: 0

a.setPrivateVar(1);
//setPrivateVar value set to: 1
//setPrivateVar has param1: 0

и

var A = function (param1) {
    this.setPublicVar(param1); // This is valid
};
A.prototype.setPublicVar = function (value) {
    this.publicVar = value; // No private variable
};

var a = new A(0);
a.setPublicVar(1);
console.log(a.publicVar); // 1
.
21
задан vanneto 2 December 2010 в 23:42
поделиться

1 ответ

Кажется, существуют ответы и на ссылку Microsoft и на ссылку SQLITE, и это - причина, некоторые люди заставляют свойство LastInsertRowId работать, и другие не.

Лично я не использую PK, поскольку это - просто псевдоним для rowid столбца. Используя rowid вокруг дважды с такой скоростью, как тот, который Вы создаете. Если у меня есть Столбец текста для PK, я все еще использую rowid и просто делаю столбец текста уникальным. (для SQLite 3 только. Вам нужно Ваше собственное для v1 & v2 как вакуум изменит rowid числа)

Тем не менее, способом получить информацию от записи в последней вставке является код ниже. Так как функция делает левое, соединяют с собой, я ОГРАНИЧИВАЮ ее 1 только для скорости, даже если Вы не сделаете то от основного оператора SELECT только будет 1 запись.

SELECT my_primary_key_column FROM my_table
WHERE rowid in (SELECT last_insert_rowid() LIMIT 1);
0
ответ дан 29 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: