【问题标题】:java.sql.SQLException: No suitable driver found for jdbc:derby:java.sql.SQLException:找不到适合 jdbc:derby 的驱动程序:
【发布时间】:2010-11-25 10:42:53
【问题描述】:

我是 jdbc 的初学者...运行此代码时遇到问题:

此代码使用 appache derby,为了使其正常工作,我首先启动了 derby 服务器..

      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://localhost:1527/ 的驱动程序 书数据库;创建=真 在 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);
   }
}

【问题讨论】:

    标签: java jdbc driver derby


    【解决方案1】:

    当您使用-jar-classpath 参数调用java 命令时,-classpath 参数将被忽略。请参阅documentation for the Java launcher

    您可以使用:

    Unix/Linux:

    java -classpath derbyclient.jar:TestDB.jar TestDB
    

    窗户:

    java -classpath derbyclient.jar;TestDB.jar TestDB
    

    或制作一个清单,将 derbyclient.jar 添加到类路径中。

    【讨论】:

    • 对不起.. 但我现在有这个!线程“主”java.lang.NoClassDefFoundError 中的异常:TestDB
    • 好吧.. 再次抱歉,simonn 它正在工作.. 我犯了一个小错误!
    【解决方案2】:

    当您使用-jar 时,-classpath 将被忽略。来自java command tool docs

    当您使用此选项时,JAR 文件 是所有用户类的来源,并且 其他用户类路径设置是 忽略。

    要么使用不带-jar-classpath 并明确指定包含main 方法的类型,要么让jar file manifest 引用derby jar 文件。

    【讨论】:

      猜你喜欢
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2013-07-04
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多