Не найдено подходящего драйвера для jdbc:sqlite

#java #sqlite #jdbc #connection

Вопрос:

У меня возникли проблемы с подключением к моей базе данных SQLite. На моем ПК с Windows все работает нормально, но если я хочу запустить свою программу на Linux(Raspberry PI), я получаю ошибку, как показано в заголовке.

Это мое подключение к Windows:

 public static final String DB_NAME = "settings.db";
public static final String CONNECTION_STRING = "jdbc:sqlite:C:\Users\oschr\eclipse-workspace\Dippmitteldosierer\src\"   DB_NAME;
 

Прежде чем экспортировать свою программу для Linux, я изменяю строку подключения:

 public static final String CONNECTION_STRING = "jdbc:sqlite:/home/pi/Desktop/"   DB_NAME;
 

Если базы данных нет, я создаю ее с помощью этого кода:

 String url = CONNECTION_STRING;
try {
    try {
        Class.forName("org.sqlite.JDBC");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    connection = DriverManager.getConnection(url);
    statement = connection.createStatement();
    
    statement.execute("CREATE TABLE IF NOT EXISTS "   TABLE_VORWAHLMENGEN   "( "   COLUMN_VORWAHLNAME   " TEXT, "   COLUMN_VORWAHLMENGE   " INTEGER)");
    statement.execute("CREATE TABLE IF NOT EXISTS "   TABLE_KALIBRIERUNGEN   "( "   COLUMN_KALIBRIERUNGNAME   " TEXT, "   COLUMN_KALIBRIERUNGMENGE   " INTEGER)");
 

Это мой путь сборки:
Это мой путь сборки

Это мой проект:
Это мой проект

Кто-нибудь может мне помочь, пожалуйста?

Комментарии:

1. Вы тоже получаете ClassNotFoundException ?

Ответ №1:

Вы используете какой-то процесс, который вы не объяснили в своем вопросе, чтобы сделать банку. Затем вы отправляете эту банку в pi и запускаете ее там.

Процесс, который вы используете, просто превращает ваш код в банку. Это не включает все ваши зависимости; обычно это не делается, так как это делает банки гигантскими и усложняет обновления.

Вариант 1: исполняемые файлы jar с записями пути к классам

Вам нужно создать банку , в которой Class-Path в манифесте указана запись jdbc-sqlite.jar , а затем убедиться, что эта банка доступна в том же каталоге, что и «брат» yourapp.jar . Как? Ну, это зависит от того, какой процесс превращает файлы ваших классов в файлы jar.

Вариант 2: Не используйте java -jar его для запуска.

Вы можете сделать это вручную, если побежите java -jar sqlite.jar:yourapp.jar com.foo.YourMainClass туда.

Вариант 3: Чередование

Обновите этот процесс, чтобы он объединил dep(ы) в одну гигантскую банку всего. Как правило, для этого вам нужна система сборки, такая как maven или gradle.

Комментарии:

1. Я не знаю, как сделать Вариант 1. ДОЛЖЕН ли я поставить sqlite.jar в папке, которая содержит мое приложение? Как я должен написать запись о пути к классу? Вариант 2 не сработал, он выдал ошибку: Не удалось получить доступ к файлу jar sqlite.jar:myapp.jar

2. Разве я не могу сделать это с помощью Eclipse автоматически? Или мне следует использовать Intellij, если в eclipse нет этой функции?

3. вариант 2: тривиально, так как вам не нужно ничего менять. В остальном: Да, но «сборка с помощью IDE» не рекомендуется для этого; вместо этого создайте сборку (на основе maven или gradle). Затем Eclipse может без проблем рассматривать ваш проект как проект maven.

4. В eclipse щелкните правой кнопкой мыши на своем проекте, экспорт… -> запускаемый файл jar — > > «обработка библиотек: извлечение необходимых библиотек в сгенерированную банку» даст вам что-то вроде варианта № 3.

5. Если я извлекаю необходимые библиотеки в сгенерированный jar и пытаюсь запустить свое приложение на Rasberry Pi, я получаю сообщение об ошибке: Недопустимый или поврежденный файл jar Myapp.jar. Извините, но я ничего не знаю о мэйвене. Почему мое приложение работает в Windows без проблем, но не в Linux….?!?