Как установить путь к базе данных SQLite относительно текущего местоположения программы?

Как можно вставить данные в таблицы используя относительный путь к базе данных вместо абсолютного пути в данной кодовой реализации с использованием класса `ElGamalParametersExporter`?
  • 14 апреля 2024 г. 10:59
Ответы на вопрос 2
Для установки пути к базе данных SQLite относительно текущего местоположения программы, можно использовать следующий код:

```java
String currentDir = System.getProperty("user.dir");
String dbPath = currentDir + File.separator + "database.db";
Connection conn = DriverManager.getConnection("jdbc:sqlite:" + dbPath);
```

В этом коде мы сначала получаем текущую директорию программы с помощью `System.getProperty("user.dir")`, затем добавляем к этому пути название файла базы данных и устанавливаем соединение с базой данных.

Чтобы вставить данные в таблицы, используя относительный путь к базе данных, вы можете модифицировать свой код следующим образом:

```java
String currentDir = System.getProperty("user.dir");
String dbPath = currentDir + File.separator + "database.db";
Connection conn = DriverManager.getConnection("jdbc:sqlite:" + dbPath);

// ваш код для создания таблицы и вставки данных
Statement statement = conn.createStatement();
statement.executeUpdate("CREATE TABLE IF NOT EXISTS your_table_name (column1 TEXT, column2 INTEGER)");
statement.executeUpdate("INSERT INTO your_table_name (column1, column2) VALUES ('value1', 123)");

conn.close();
```

В этом примере после установления соединения с базой данных по относительному пути, мы создаем таблицу (если ее еще нет) и вставляем данные в нее с помощью SQL запросов. Не забудьте закрыть соединение с базой данных после завершения работы.
Скорее всего рабочая директория другая - не директория с исходным кодом. Т.к. запуск производится где-то из bin/Debug/net8.0/... , а там этой БД и нет. 
Тут 2 решения:
1. Прописывай относительный путь с учетом папки: ../../../database/Keys.db
2. Прописывай абсолютный путь

Но лично я рекомендую вынести это куда-нибудь в конфигурацию, а не простой строкой в исходном коде (передавай например через аргументы командной строки).

P.S. путь для 1 кейса не факт что правильный - поиграйся с путями
Похожие вопросы