Я использую Database-Rider для тестирования баз данных. Если я правильно понял, двоичные данные в файловом наборе данных должны быть закодированы как строка Base64, поэтому для набора xml-данных мы получаем что-то вроде этого:
По моему опыту это работает для PostgreSQL (и, очевидно, для hsqldb, поскольку он используется в тестах базы данных), но не работает для SQLite. В столбце двоичных данных PostgreSQL есть тип bytea, поэтому данные в кодировке Base64 каким-то образом преобразуются в массив байтов при вставке в таблицу и наоборот из массива байтов в текст Base64 при чтении для сравнения с ожидаемым набором данных (я думаю потому что я не занимаюсь мануальным кодированием/декодированием данных). Но с SQLite, если я вставлю двоичные данные в таблицу следующим образом
Код: Выделить всё
double[] data = entity.getData();
ByteBuffer bb = ByteBuffer.allocate(data.length * 8);
for (double d : xy) {
bb.putDouble(d);
}
byte[] bytes = bb.array();
PreparedStatement statement = connection.prepareStatement("INSERT INTO sdata(data) VALUES (?)");
statement.setBytes(1, bytes);
Statement.executeUpdate();
затем ожидаемый набор данных завершается сбоем, потому что данные считываются программой базы данных из SQLite как байтовый массив, но ожидаемый набор данных закодирован как текст Base64, и я получил ошибку теста:< /p>
Код: Выделить всё
org.dbunit.assertion.DbComparisonFailure[value (table=sdata, row=0, col=data)expected: but was:
Подробнее здесь: [url]https://stackoverflow.com/questions/79185182/how-to-adapt-database-rider-to-sqlite-blob-data[/url]