2010-10-24 33 views
17

Tôi đang cố sử dụng H2 để kết nối với cơ sở dữ liệu trong Java (sử dụng Eclipse làm IDE). Mẫu thực hiện (bên dưới) ném một số ClassNotFoundException. Vấn đề là, tôi đã làm thêm tệp jar h2 vào hệ thống CLASSPATH. Tôi thậm chí đã kiểm tra nó có nhiều lần thông qua printenv trong giao diện điều khiển. Tôi có bỏ qua một bước không?java ClassNotFoundException cho org.h2.Driver

Mã sản phẩm:

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); 

} 

} 
+0

Làm thế nào mà bạn thêm Jar vào classpath của bạn? Để chắc chắn, tôi sẽ tạo một thư mục trong dự án của bạn được gọi là 'lib', sao chép jar vào nó, sau đó nhấp chuột phải và chọn 'Đường dẫn xây dựng> Thêm để tạo đường dẫn'. – William

+0

Bạn có thể định dạng mã của mình đúng cách không - chọn mã và sử dụng nút thứ 5 (Mã mẫu) trên thanh công cụ chỉnh sửa trong khi ở chế độ chỉnh sửa. –

+0

Bạn đang chạy mã của mình như thế nào? Bên trong Eclipse hoặc từ dòng lệnh? Bạn đã thêm h2.jar vào đường dẫn lớp như thế nào? Làm thế nào bạn kiểm tra sự tồn tại của h2.jar trong classpath? –

Trả lời

6

Mẫu không (dưới đây) ném một ClassNotFoundException

Sau đó, người lái xe không phải là trên classpath.

Vấn đề là tôi đã thêm tệp jar h2 vào hệ thống CLASSPATH. Tôi thậm chí đã kiểm tra nó có nhiều lần thông qua 'printenv' trong giao diện điều khiển.

Bạn đã làm điều đó chính xác như thế nào? Vui lòng hiển thị kết quả thu được.

Tôi có bỏ qua một bước không?

Tôi không thể nói với thông tin được cung cấp. Tuy nhiên, dựa vào biến môi trường CLASSPATH là một thực tế không tốt và bạn nên sử dụng tùy chọn -cp nếu bạn đang chạy Java trên dòng lệnh. Như thế này:

java -cp h2.jar com.acme.Program 

Có cách nào tôi có thể thiết Eclipse để sử dụng các tập tin jar khi tôi sử dụng menu RUN vì vậy mà tôi không cần phải chạy từ Console tất cả các thời gian?

Có. Trong Eclipse, thêm JAR vào đường dẫn xây dựng dự án: nhấp chuột phải vào dự án của bạn rồi Thuộc tính> Đường dẫn xây dựng Java> Libaries> Thêm JARS ... (giả sử H2 JAR có sẵn trong thư mục liên quan đến dự án của bạn). Những người khác IDE có cách tương đương để làm điều này.

+0

Cảm ơn. Tôi không biết CLASSPATH là chính sách kém. Có cách nào tôi có thể thiết lập Eclipse để sử dụng các tập tin jar khi tôi sử dụng menu RUN để tôi không phải chạy từ Console tất cả các thời gian? –

25

Trong trường hợp của tôi (không liên quan một chút, nhưng đáng nói), tôi đã thêm này để pom maven của tôi, và thông báo lỗi ra đi:

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>xxx</version> <!-- ex: 1.2.140 --> 
    </dependency> 

hoặc nếu bạn chỉ sử dụng h2 trong đơn vị thử nghiệm:

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>xxx</version> <!-- ex: 1.2.140 --> 
    <scope>test</scope> 
    </dependency> 
+1

Có thể muốn thêm ' kiểm tra' vì đó là cách nó thường được sử dụng nhất. Phiên bản mới nhất có sẵn tại đây: http://www.h2database.com/html/main.html – GlenPeterson

4

Gần đây tôi gặp java.lang.ClassNotFoundException: org.h2.Driver ngoại lệ trong IntelliJ IDEA 2017,2 EAP khi sử dụng phiên bản mới nhất (1.4.196) của tài xế H2. Giải pháp là hạ cấp xuống 1.4.195 đã hoạt động.

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

<scope>[database_name]</scope> nên bao gồm cơ sở dữ liệu bạn đang làm việc. Nếu bạn thay đổi db của bạn từ một đến khác, hãy chắc chắn để thay đổi phạm vi cũng có. Ngay sau khi tôi thay đổi nó, lỗi đã biến mất.

1

Trong trường hợp của tôi (tôi sử dụng SBT) thay đổi

libraryDependencies += "com.h2database" % "h2" % "1.4.196" % Test 

để

libraryDependencies += "com.h2database" % "h2" % "1.4.196" 
Các vấn đề liên quan