2013-12-17 4 views
0

Я работаю с Eclipse (работает на Windows 8.1) и хочу получить доступ к базе данных sqlite. К сожалению, я не смог работать с драйвером, хотя я определил его местоположение в переменной CLASSPATH. Следующая программа одного из тысячи обучающих сайтов:Java & SQLite - еще один классNotFoundexception

package sqliteconnectiontest; 

import java.sql.Connection; 
import java.sql.Statement; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.DatabaseMetaData; 

public class test { 
public static void main(String[] args) throws Exception { 
    // register the driver 
    String sDriverName = "org.sqlite.JDBC"; 
    Class.forName(sDriverName); 

    // now we set up a set of fairly basic string variables to use in the 
    // body of the code proper 
    String sTempDb = "hello.db"; 
    String sJdbc = "jdbc:sqlite"; 
    String sDbUrl = sJdbc + ":" + sTempDb; 
    // which will produce a legitimate Url for SqlLite JDBC : 
    // jdbc:sqlite:hello.db 
    int iTimeout = 30; 
    String sMakeTable = "CREATE TABLE dummy (id numeric, response text)"; 
    String sMakeInsert = "INSERT INTO dummy VALUES(1,'Hello from the database')"; 
    String sMakeSelect = "SELECT response from dummy"; 

    // create a database connection 
    System.out.println(sDbUrl); 
    Connection conn = DriverManager.getConnection(sDbUrl); 
    try { 
     Statement stmt = conn.createStatement(); 
     try { 
      stmt.setQueryTimeout(iTimeout); 
      stmt.executeUpdate(sMakeTable); 
      stmt.executeUpdate(sMakeInsert); 
      ResultSet rs = stmt.executeQuery(sMakeSelect); 
      try { 
       while (rs.next()) { 
        String sResult = rs.getString("response"); 
        System.out.println(sResult); 
       } 
      } finally { 
       try { 
        rs.close(); 
       } catch (Exception ignore) { 
       } 
      } 
     } finally { 
      try { 
       stmt.close(); 
      } catch (Exception ignore) { 
      } 
     } 
    } finally { 
     try { 
      conn.close(); 
     } catch (Exception ignore) { 
     } 
    } 
} 
} 

я уже скачал SQLite-JDBC-драйвер 3.7.2.jar от http://www.xerial.org/maven/repository/artifact/org/xerial/sqlite-jdbc/3.7.2/

Водитель находится в:

B:\sqlite-jdbc-3.7.2.jar 

Мой .class Файл:

B:\Progs\Java\sqlconnectiontest\bin\sqliteconnectiontest\test.class 

CLASSP ATH переменная среды:

CLASSPATH=B:\sqlite-jdbc-3.7.2.jar; 

Когда я пытаюсь запустить программу это исключение брошено:

Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at sqliteconnectiontest.test.main(test.java:14) 

Из того, что я нашел через Интернет эта проблема должна означать, что JDBC-драйвер не может но я нахожу свое направление в переменной среды CLASSPATH.

+0

Добавить \t \t 'System.out.println (System.getProperty ("java.class.path"));' ' перед тем Class.forName' и проверить, если ваш каталог' jar' есть. –

ответ

0

Эта проблема выбрана Classl¡Loader, когда она не может найти необходимый класс.

Это может быть вызвано двумя проблемами:

а) вы ищете класс не в файле JAR (вы можете проверить это разжатия банку).

b) Вы не используете CLASSPATH, о котором думаете.

Не могли бы вы убедиться, что CLASSPATH, используемый ClassLoader, является тем же, что вы устанавливаете?

В How to get the path of running java program вы можете найти, как получить текущий CLASSPATH работающего экземпляра JVM.

+0

Я несжатый jar-файл раньше, класс действительно есть. Поэтому мы можем отменить «а» ». – JohnSmith

+0

Затем проверьте реальный путь к классу –

+0

Использование: 'String classpath = System.getProperty (" java.class.path "); String [] classpathEntries = classpath.split (File.pathSeparator); 'для его получения –

Смежные вопросы