Хранение байтового массива в базе данных HTML5 sqlite - PullRequest
0 голосов
/ 10 апреля 2011

Я работаю над автономным мобильным веб-приложением, и мне нужно хранить большие объемы необработанных байтов в базе данных HTML5. Я хочу хранить их как можно более компактными, поэтому объединенная строка не вариант. Вот пример кода, который создает базу данных, таблицу, вставляет данные и извлекает их снова.

Пример:

var bytes=[97, 0, 6, 244, 98, 66, 76, 65, 131, 5, 7, 142, 81, 184, 112, 33];

openDatabase('_test_', 1.0, '_test-', 5000).transaction(function(tx) {
tx.executeSql("DROP TABLE IF EXISTS MYTABLE", [], function(){
tx.executeSql("CREATE TABLE IF NOT EXISTS MYTABLE(content BLOB);",[],function(){
tx.executeSql("INSERT INTO MYTABLE values(?)", [bytes], 
    function()
    {
        tx.executeSql("SELECT * FROM MYTABLE ", [], function(transaction, results)
        {
            console.log(results.rows.item(0))
        });
},function(transaction, error){console.log(error)})
},function(transaction, error){console.log(error)})
})
})

Я пытаюсь сохранить массив как есть, который на самом деле сохраняет как объединенную строку: «97, 0, 6, 244, 98, 66, 76, 65, 131, 5, 7, 142, 81, 184, 112, 33 ". Не то, что мне нужно, так как оно будет слишком большим.

Я сейчас преобразовываю массив в строку:

openDatabase('_test_', 1.0, '_test-', 5000).transaction(function(tx) {
tx.executeSql("DROP TABLE IF EXISTS MYTABLE", [], function(){
tx.executeSql("CREATE TABLE IF NOT EXISTS MYTABLE(content BLOB); ", [], function(){
tx.executeSql("INSERT INTO MYTABLE values(?)", [s], 
    function()
    {
        tx.executeSql("SELECT * FROM MYTABLE ", [], function(transaction, results)
        {
            console.log(results.rows.item(0))
        });
},function(transaction, error){console.log(error)})
},function(transaction, error){console.log(error)})
})
})

То, что теперь возвращает БД, это просто «a».

Итак, мой вопрос: как мне сериализовать байтовый массив javascript в базе данных HTML5, не прибегая к объединенной строке?

1 Ответ

1 голос
/ 10 апреля 2011

Преобразование данных в шестнадцатеричные значения и вставка следующим образом:

INSERT INTO t2 VALUES(X'53514C697465');

BLOB-литералы - это строковые литералы, содержащие шестнадцатеричные данные и перед которыми стоит один символ "x" или "X"

Литеральные значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...