Введите код:
insertStatement = new SQLStatement();
insertStatement.sqlConnection = connection;
insertStatement.addEventListener(SQLEvent.RESULT, onInsertResult);
insertStatement.addEventListener(SQLErrorEvent.ERROR, onInsertError);
insertStatement.text = "INSERT INTO my_table (title, imagedata) VALUES (@titleString, @imageByteArray)";
insertStatement.parameters["@titleString"] = pngTitle; // String containing title
insertStatement.parameters["@imageByteArray"] = pngByteArray; // ByteArray containing image
insertStatement.execute();
Код получения:
selectStatement = new SQLStatement();
selectStatement.sqlConnection = connection;
selectStatement.addEventListener(SQLEvent.RESULT, onSelectResult);
selectStatement.addEventListener(SQLErrorEvent.ERROR, onSelectError);
selectStatement.text = "SELECT title, CAST(imagedata AS ByteArray) AS imagedata FROM my_table WHERE id = @recordId;";
selectStatement.parameters["@recordId"] = targetRecordId; // Id of target record
selectStatement.execute();
...
function onSelectResult(event:SQLEvent):void {
selectStatement.removeEventListener(SQLEvent.RESULT, onSelectResult);
var result:SQLResult = selectStatement.getResult();
if (result.data != null) {
var row:Object = result.data[0];
var pngByteArray:ByteArray = result.data[0].imagedata;
var pngTitle:String = result.data[0].title;
}
}
Если у вас все еще есть проблемы, попробуйте также закодировать данные в base64 до вставки и аналогично декодировать из base64 после извлечения. Это добавит дополнительные 40% к размеру вставки данных в базу данных, но может помочь устранить проблемы при использовании двоичных данных с SQLite.
Последующие вопросы:
Я не увидел ссылку на свою базу данных в папке активов / ресурсов из приложения.
Если у вас была папка с именем assets
в каталоге пакетов по умолчанию, и она содержала предварительно заполненный файл базы данных mydb.sqlite
(например), вы можете открыть базу данных следующим образом:
var dbf:File = File.applicationDirectory.resolvePath("assets/mydb.sqlite");
var connection:SQLConnection = new SQLConnection();
connection.open(dbf);
Нужно ли строить его из кода как такового?
Вам не нужно создавать базу данных из кода - фактически я обычно использую SQLite Manager для создания баз данных SQLite. Однако, поскольку вы используете BLOB-данные, лучше всего заполнять базу данных кодом.
Значит ли это, что мне нужно хранить свои изображения в папке ресурсов (или на удаленном сервере и т. Д.), Чтобы заполнить базу данных?
Изображения могут быть локальными или удаленными. Вам просто нужно иметь возможность загружать их в байтовый массив для хранения. Но если у вас есть возможность отдельного репозитория изображений, было бы лучше хранить ссылки / пути к изображениям, а не хранить двоичные данные в базе данных.