Хранение двоичных данных в виде строки в базе данных Web Sql - PullRequest
3 голосов
/ 31 июля 2010

Хорошо, поэтому я загружаю порции данных через xhr и хочу сохранить их локально для расширения chrome.

Сначала я смог сохранить его в localStorage, но затем мне нужно былоПерейдем к более крупным фрагментам, которые не может обработать localStorage. Поэтому я решил сохранить его в Web Sql Database .Однако я смог сохранить данные в localStorage точно так же, как они были загружены, но когда я пытаюсь сохранить их в базе данных, данные теряются или я получаю сообщение об ошибке.

Примерно так:

//this way the data gets lost because it is filtered to prevent SQL injection attacks
tx.executeSql('INSERT INTO files (id, content) VALUES (?,?)', [fileID,file]);

//this method gives an error (unrecognized token) because the data contains byte values in the string  
tx.executeSql('INSERT INTO files (id, content) VALUES (?, "' + file + '")', [id]);

Единственный другой способ ввода данных в базу данных - это использование btoa(file), и это работает, но я думаю, что производительность сильно снизится, если потребуется btoa / atob каждый раз, когда данные хранятся / используются.

Поэтому мой вопрос заключается в том, как сохранить данные в базе данных без использования btoa, или если это невозможно, насколько высокая производительностьbtoa использует?

Я также вполне уверен, что localStorage использует SQLite, а также базу данных Web Sql, так почему я не могу просто поместить данные в последнюю так легко, как я могус localStorage?

1 Ответ

0 голосов
/ 23 сентября 2011

Посмотрите на что-то вроде этого, вам нужно будет base64 кодировать двоичные данные, так как это должны быть печатные символы.

http://www.webtoolkit.info/javascript-base64.html

Это приведет к примерно четырехкратному увеличению размера двоичных данных.

Вам нужно было бы закодировать его как шестнадцатеричное, я думаю, может быть, для представления двоичных данных с использованием SQLite

tx.executeSql('INSERT INTO files (id, content) VALUES (2, "0xBADF00D12840F32");');

Например, последний метод SQLite, вероятно, будет более эффективным.

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