2009-09-03 3 views
2

Я новичок с JDBC ... У меня есть проблемы запуска этого кода:java.sql.SQLException: Нет подходящий драйвер найден для JDBC: дерби:

Этот код использует appache котелок и для того, чтобы сделать он работает, я первым начал сервер дерби ..

 java -jar "C:\Program Files\Sun\JavaDB\lib\derbyrun.jar" server start 

А потом начал программу

 java -classpath derbyclient.jar -jar TestDB.jar 

Я установил Путь класса C: \ Program Files \ Sun \ JavaDB \ Lib \ derby.jar

И я всегда получаю это исключение

java.sql.SQLException: Нет подходящего драйвера найден для JDBC: Derby: // локальный: 1527/ BOOKDB, создать = истинный в java.sql. DriverManager.getConnection (DriverManager.java:602) в java.sql.DriverManager.getConnection (DriverManager.java:185) в TestDB.getConnection (TestDB.java:63) в TestDB.runTest (TestDB.java:20) на TestDB.main (TestDB.java:11)

import java.sql.*; 
import java.io.*; 
import java.util.*; 


class TestDB 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
     runTest(); 
     } 
     catch (SQLException ex) 
     { 
     for (Throwable t : ex) 
      t.printStackTrace(); 
     } 
     catch (IOException ex) 
     { 
     ex.printStackTrace(); 
     } 
    } 

    public static void runTest() throws SQLException, IOException 
    { 
     Connection conn = getConnection(); 
     try 
     { 
     Statement stat = conn.createStatement(); 

     stat.executeUpdate("CREATE TABLE Greetings (Message CHAR(20))"); 
     stat.executeUpdate("INSERT INTO Greetings VALUES ('Hello, World!')"); 

     ResultSet result = stat.executeQuery("SELECT * FROM Greetings"); 
     if (result.next()) 
      System.out.println(result.getString(1)); 
     result.close(); 
     stat.executeUpdate("DROP TABLE Greetings"); 
     } 
     finally 
     { 
     conn.close(); 
     } 
    } 

    public static Connection getConnection() throws SQLException, IOException 
    { 
     Properties props = new Properties(); 
     FileInputStream in = new FileInputStream("database.properties"); 
     props.load(in); 
     in.close(); 

     String drivers = props.getProperty("jdbc.drivers"); 
     if (drivers != null) System.setProperty("jdbc.drivers", drivers); 
     String url = props.getProperty("jdbc.url"); 
     String username = props.getProperty("jdbc.username"); 
     String password = props.getProperty("jdbc.password"); 

     return DriverManager.getConnection(url, username, password); 
    } 
} 

ответ

5

При вызове команды java с параметрами -jar и -classpath параметр -classpath игнорируется. См. documentation for the Java launcher.

Вы можете использовать:

Unix/Linux:

java -classpath derbyclient.jar:TestDB.jar TestDB 

Окна:

java -classpath derbyclient.jar;TestDB.jar TestDB 

или сделать манифест, который добавляет derbyclient.jar к классам.

+0

извините .. но у меня сейчас это! Исключение в теме "main" java.lang.NoClassDefFoundError: TestDB – 2009-09-03 23:29:13

+0

ну .. извините, опять симон он работает .. Я сделал небольшую ошибку! – 2009-09-04 00:05:29

2

При использовании -jar, -classpath игнорируется. Из java command tool docs:

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

-classpath Либо использовать без -jar и указать тип, содержащий основной метод в явном виде, или сделать свою jar file manifest ссылку банка файла котелок.

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