Мне нужно создать базу данных один раз с помощью операторов create / insert, а затем сделать ее доступной внутри javafx runnable jar с доступом к базе данных только чтение.
Я просто много раз просматривал документ базы данных H2 и пытался добиться этого с помощью H2 Driver version 1.4.196 and 1.4.192, но я думаю, что что-то упустил.
Я могу подключиться, не включая его в работающую банку, и все, что угодно, тоже работает. Но мне нужно получить к нему доступ из самого jar, чтобы предотвратить доступ к БД от посторонних.
Могу ли я подключить строку или логику подключения для подключения файла БД только для чтения из самого jar?
Конечно, мне нужен более четкий практический пример из это, это и это.
Я реализовал логику архивирования как это, и она отлично работает с заданным путем.
Но когда я добавил zip-файл в runnable jar и получил доступ к нему через следующий код:
DriverManager.getConnection("jdbc:h2:file:split:zip:./test.zip!/test");
Затем он выдает исключение с:
Exception in thread "main" org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.FileNotFoundException: .\jar\res\buzdirectory.zip (The system cannot find the path specified)"; "listFiles zip:./jar/res/buzdirectory.zip!/" [90031-196]
Если я поставлю полностью квалифицированный путь, он будет работать хорошо:
DriverManager.getConnection("jdbc:h2:file:split:zip:C:\\CoreJava\\src\\main\\java\\res\\test.zip!/test");
То, что мне здесь не хватает, чтобы получить доступ к нему из файла jar.
На самом деле путь к zip-файлу идеален и существует, но я думаю, что напортачил с созданием файла. Могу я сделать то же самое?
А в zip файле содержится база данных? Похоже, вы ставите лошадь впереди телеги (но я могу неправильно понять, где вы собираетесь). Очевидно, вам нужно создать базу данных, заполнить ее данными перед ее архивированием.
Да, он содержит файл базы данных с именем test.mv.db, созданный службой подключения netbeans и выполняющий операторы create / insert перед его заархивированием с помощью 7z.
Хммм, а H2 поддерживает 7z? Вы пробовали более традиционный архиватор ZIP или даже банку (которая просто использует ZIP)?
Если ваш файл базы данных находится в ваших ресурсах, попробуйте заменить ~ на.
Знак ~ предназначен для каталога пользователя по умолчанию, см. Это: h2database.com/html/tutorial.html#console_settings




I считать мы не можем открыть файл базы данных непосредственно из исполняемого файла JAR. Для доступа к нему должен быть «настоящий» файл, поэтому нам нужно будет извлечь его из JAR, а затем открыть эту копию.
Например, чтобы извлечь базу данных из JAR во временный файл:
File dbFile = File.createTempFile("temp", ".zip");
dbFile.deleteOnExit();
java.nio.file.Files.copy(this.getClass().getResourceAsStream("/db/temp.zip"),
dbFile.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING);
StringBuffer connStr = new StringBuffer("jdbc:h2:file:split:zip:")
.append(dbFile.getAbsolutePath()).append("!/temp");
Connection conn = DriverManager.getConnection(connStr.toString());
conn.close();
System.out.println("closed");
Между прочим, это пока не для всех. Но мы можем использовать такой подход в некоторых особых случаях.
Где хранится ZIP-файл? Похоже, вы ссылаетесь на несуществующий файл