Как проверить в SQLite, существует ли таблица? - PullRequest
824 голосов
/ 21 октября 2009

Как мне, надежно , проверить в SQLite, существует ли конкретная пользовательская таблица?

Я не прошу ненадежных способов, таких как проверка, вернул ли «select *» в таблице ошибку или нет (это даже хорошая идея?).

Причина такова:

В моей программе мне нужно создать, а затем заполнить некоторые таблицы, если они еще не существуют.

Если они уже существуют, мне нужно обновить некоторые таблицы.

Должен ли я вместо этого использовать другой путь, чтобы указать, что соответствующие таблицы уже созданы - например, путем создания / установки / установки определенного флага в файле инициализации / настройки моей программы на диске или что-то в этом роде?

Или мой подход имеет смысл?

Ответы [ 21 ]

0 голосов
/ 03 февраля 2017

Это мой код для SQLite Cordova:

get_columnNames('LastUpdate', function (data) {
    if (data.length > 0) { // In data you also have columnNames
        console.log("Table full");
    }
    else {
        console.log("Table empty");
    }
});

А другой:

function get_columnNames(tableName, callback) {
    myDb.transaction(function (transaction) {
        var query_exec = "SELECT name, sql FROM sqlite_master WHERE type='table' AND name ='" + tableName + "'";
        transaction.executeSql(query_exec, [], function (tx, results) {
            var columnNames = [];
            var len = results.rows.length;
            if (len>0){
                var columnParts = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').split(','); ///// RegEx
                for (i in columnParts) {
                    if (typeof columnParts[i] === 'string')
                        columnNames.push(columnParts[i].split(" ")[0]);
                };
                callback(columnNames);
            }
            else callback(columnNames);
        });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...