Подготовка базы данных SQLite для удаленной загрузки для мобильной разработки - PullRequest
1 голос
/ 26 июля 2011

Мое мобильное титановое приложение загружает данные из удаленного URL-адреса в виде созданного мной файла XML. Идея состоит в том, что приложение загружает этот XML и обрабатывает его в базе данных SQLlite. Но я подумал, что я мог бы также заменить сгенерированный xml на стороне сервера готовым файлом sqlite со всеми данными в нем. Таким образом, мне не нужно выполнять обработку на стороне клиента, что экономит часть времени пользователя.

Это хорошая идея? Если да, как бы я "подделал" генерировать файл sqlite? Нет заголовков, которые мне нужно передать, так что это не проблема, но я заметил, когда открыл файл .sqlite с помощью coda, что есть странные символы, означающие, что кодировка должна быть другой.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 июля 2011

Вы можете создать базу данных SQLite во многих программах - я использую MesaSQLLite.Это просто двоичный файл.Вот пример загрузки и установки на iOS.Я не тестировал его на Android.

var win = Ti.UI.createWindow({
    backgroundColor: '#eee'
});

var button1 = Ti.UI.createButton({
    width: '60%',
    height: 30,
    top: 5,
    title: '1) Get Database'
});

var button2 = Ti.UI.createButton({
    width: '60%',
    height: 30,
    top: 40,
    title: '2) Install Database'
});

var button3 = Ti.UI.createButton({
    width: '60%',
    height: 30,
    top: 75,
    title: '3) Query Database'
});

var msg = Ti.UI.createLabel({
    top: 110,
    width: '80%',
    height: 120,
    text: 'click the buttons in order',
    font: {
        fontFamily: 'Courier',
        fontSize: 12
    },
    textAlign: 'center'
});

win.add(button1);
win.add(button2);
win.add(button3);
win.add(msg);

function localFile() {
    var localDbFile = 'testdb.db';
    return Ti.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory, localDbFile);
}

button1.addEventListener('click',
function() {
    msg.text = "Getting Database from Server";
    var xhr = Ti.Network.createHTTPClient();
    xhr.open("GET", "http://www.titaniumdevelopment.com.au/testdb.db");
    xhr.onload = function() {
        if (xhr.status == 200) {
            msg.text = "saving database";
            var file = localFile();
            file.write(this.responseData);
            msg.text = "database saved as " + file.nativePath;
        } else {
            msg.text = "Unable to get database. Response code was " + xhr.status;
        }
    };
    xhr.onerror = function() {
        msg.text = "Error fetching database";
    };
    xhr.send();
});

button2.addEventListener('click',
function() {
    var file = localFile();
    if (file.exists()) {
        msg.text = "installing database";
        Ti.Database.install(file.nativePath, 'test');
        msg.text = "database installed";
    } else {
        msg.text = "unable to find database";
    }
});

button3.addEventListener('click',
function() {
    try {
        var db = Titanium.Database.open('test');
        var rows = db.execute('SELECT * FROM TIPS');
        msg.text = 'ROW COUNT = ' + rows.getRowCount();
        rows.close();
        db.close();
    } catch(e){
        msg.text = "unable to open database";
    }
});

win.open();

Примечание: я не уверен, что App Store одобрит это, поскольку они не слишком заинтересованы в удаленной загрузке данных.

0 голосов
/ 26 июля 2011

Ни в одном из известных мне браузеров не существует механизма, который позволял бы передавать двоичное изображение базы данных sqlite (даже если допустить, что порядок следования байтов и кодировка символов не были проблемой).может повысить производительность, чтобы поддерживать / передавать данные в формате, более близком к набору операторов CREATE и INSERT, чем атомарный XML.

...