java ClassNotFoundException для org.h2.Driver

Я пытаюсь использовать H2 для подключения к базе данных на Java (используя Eclipse в качестве IDE). Образец (ниже) выбрасывает ClassNotFoundException. Дело в том, что я сделал добавление файла j2 har в систему CLASSPATH. Я даже несколько раз проверил его там через printenv в консоли. Я пропускаю шаг?

КОД:

import java.sql.*;

public class Program {

 /**
  * @param args
  */
 public static void main(String[] args) 
  throws Exception{

  try{
   System.out.println("hello, world!");
   Class.forName("org.h2.Driver");
   Connection conn = DriverManager.getConnection("jdbc:h2:~/testdb", "sa", "");
   // add application code here
   conn.close();
  }catch(ClassNotFoundException ex){
   System.out.println( "ERROR: Class not found: " + ex.getMessage() );

  }
  System.exit(0);

 }

}

28
задан 15.12.2017, 10:51

5 ответов

Недавно я столкнулся с исключением java.lang.ClassNotFoundException: org.h2.Driver в IntelliJ IDEA 2017.2 EAP при использовании последней версии (1.4.196) драйвера H2 . Решение было снизить до 1.4.195, который работал.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.195</version>
    <scope>test</scope>
</dependency>
13
ответ дан 14.10.2019, 13:30
  • 1
    не допустимый ответ. должен выбрать класс, не идентификатор отделения – Iria Poncela Blanco 01.04.2020, 17:50

У меня была следующая ошибка (с использованием Intellij)

java ClassNotFoundException для org.h2.Driver

Решил эту проблему, удалив область из моего pom.

было:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.197</version>
        <scope>test</scope>
    </dependency>

изменено на:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.197</version>
    </dependency>

Этот тип ошибки возникнет, когда мы реализуем проект Maven Quickstart как зависимость от другого проекта. В основном встречается как тест только на джунит. Так что в приложении это не сработает.

4
ответ дан 14.10.2019, 13:30
  • 1
    Едва ли, когда Вы просто нуждаетесь в маленьком тесте и создали новый маленький проект андроида только для этого..:) – Henrique de Sousa 16.10.2013, 06:04

Используйте версию релиза.

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>
    </dependency>
0
ответ дан 14.10.2019, 13:30
  • 1
    Хорошо это - хорошая идея, если Вы просто тестируете приложение на манипулирование данными и don' t хотят беспокойство о потоках некоторое время. – Muhammad 01.09.2014, 01:01

В моем случае это проблема строки подключения. Я видел это .

После того, как я добавил mem в строку URL ниже, и это сработало.

String url = "jdbc:h2:mem:~/test";
0
ответ дан 14.10.2019, 13:30
  • 1
    Строго не рекомендуемый, но если you' ре, тестирующее некоторую функциональность и потребность сделать это быстрее, можно использовать его. It' s убедительно предполагал что Вы shouldn' t используют это в продуктивной среде. Мы don' t хотят плохо разработанные приложения, не так ли? – noob 18.09.2014, 00:17

Использование <scope>test</scope> не должно работать логически. попробуйте это с помощью <scope>runtime</scope> или <scope>provided</scope>, если только вам это не нужно для фазы тестирования.

В maven docs говорится, что <scope>test</scope> зависимость не требуется для нормального использования приложения и доступна только для фаз компиляции и выполнения теста
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

0
ответ дан 14.10.2019, 13:30

Теги

Похожие вопросы