H2, HSQLDB или любая другая встроенная база данных, использующая InputStream - PullRequest
2 голосов
/ 28 июня 2011

Могу ли я использовать H2, HSQLDB или любую другую встроенную базу данных с базой данных из InputStream вместо файла?

Я планирую использовать AssetManager.open() на Android, что может вернуть InputStream в режиме произвольного доступа.

Ответы [ 4 ]

3 голосов
/ 28 июня 2011

H2 поддерживает подключаемую файловую систему , которая позволяет получить доступ к базам данных только для чтения в zip или jar-файлах . Однако в настоящее время нет никакой реализации файловой системы для AssetManager. Это должно быть относительно легко реализовать. Лучшая отправная точка, вероятно, FileSystemZip и FileObjectZip .

0 голосов
/ 28 июня 2011

Если вы готовы немного поработать, это можно сделать с помощью HSQLDB, особенно версии 1.8.1.x, которая меньше по размеру.

Проверьте org.hsqldb.lib.ResourceStreamProviderКласс и измените его, чтобы использовать потоки, которые вы предоставляете для имен файлов db.properties и db.script, когда выполняются вызовы его статического метода getResourceAsStream.

Довольно просто, особенно потому что db.script и db.свойства состоят из текста, который вы можете легко создать в остальной части вашей программы.

0 голосов
/ 28 июня 2011

AFAIK, H2 и HSQLDB предоставляют только URI для подключения к файлам и в памяти при использовании в "автономном" режиме. Таким образом, файл или некоторый объем памяти кучи, должны быть необходимы; но вы не даете ему File / InputStream, все находится в URI соединения, например, jdbc:h2:~/test.

0 голосов
/ 28 июня 2011

Большинству баз данных требуется произвольный доступ к базовым файлам, поэтому InputStream не подойдет.

...