【问题标题】:Error when trying to run a program that creates a Java DataBase. What am I missing?尝试运行创建 Java 数据库的程序时出错。我错过了什么?
【发布时间】:2013-12-08 10:58:38
【问题描述】:

这是我书中的一个示例程序,在我运行我自己的分配程序以访问数据库和检索数据之前,我需要运行它。我的问题是,这段代码不能正常运行,它给了我:

"ERROR: No suitable driver found for jdbc:derby:CityDB;create=true" 

at runtime.

我正在使用 IntelliJ 13 - 社区版。

import java.sql.*;

/**
This program creates the CityDB database.                                    *
*/

public class CreateCityDB {

public static void main(String[] args) throws Exception {
    String sql;
    final String DB_URL = "jdbc:derby:CityDB;create=true";

    try {
        // Create a connection to the database.
        Connection conn = DriverManager.getConnection(DB_URL);

        // Create a Statement object.
        Statement stmt = conn.createStatement();

        // Create the Dvd table.
        System.out.println("Creating the City table...");
        stmt.execute("CREATE TABLE City ("    +
                    "CityName CHAR(25) NOT NULL PRIMARY KEY, "   +
                    "Population DOUBLE)");

        // Add some rows to the new table.
        sql = "INSERT INTO City VALUES" +
                "('Beijing', 12500000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Buenos Aires', 13170000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Cairo', 14450000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Calcutta', 15100000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Delhi', 18680000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Jakarta', 18900000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Karachi', 11800000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Lagos', 13488000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('London', 12875000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Los Angeles', 15250000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Manila', 16300000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Mexico City', 20450000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Moscow', 15000000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Mumbai', 19200000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('New York City', 19750000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Osaka', 17350000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Sao Paulo', 18850000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Seoul', 20550000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Shanghai', 16650000)";
        stmt.executeUpdate(sql);

        sql = "INSERT INTO City VALUES" +
        "('Tokyo', 32450000)";
        stmt.executeUpdate(sql);

        // Close Resources
        stmt.close();
        conn.close();
        System.out.println("Done");
    }
    catch(Exception ex) {
        System.out.println("ERROR: " + ex.getMessage());
    }

}

}

【问题讨论】:

  • 找不到合适的驱动程序。这意味着 Derby 的 JDBC 驱动程序不在运行时类路径中。将其添加到类路径中。
  • @JBNizet 我的路径和类路径设置正确。
  • @EdoIsa 您的问题令人困惑,您的代码显示您使用的是 derby 数据库,但标签是 mysql。您使用的是哪个数据库?
  • 我正在使用 Derby ...确切地说,我还没有通过这个错误来实际使用任何数据库。我只是对设置感到困惑。
  • 用Java程序来做这件事是不是有点矫枉过正? derby 不接受 SQL 脚本吗?

标签: java database derby javadb


【解决方案1】:

首先使用加载类:

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

编辑:

原来 JavaDB 在 JDK 中并不容易使用。见http://db.apache.org/derby/integrate/plugin_help/derby_app.html#Changing+the+application+to+use+the+Derby+Embedded+Driver

要在其嵌入模式下使用 Derby,请将您的 CLASSPATH 设置为包含下面列出的 jar 文件: derby.jar:包含 Derby 引擎和 Derby Embedded JDBC 驱动程序

编辑 2:

我尝试在类路径上仅使用 derby.jar 编译您的示例,但它失败了。添加derbyclient.jar 后它也可以工作(来自JDK7)。

【讨论】:

  • 这一行在 main 方法中正确吗?我把它作为第一行,我从那行得到一个巨大的错误。
  • 是的,我已经设置了我的 CLASSPATH。目前持有:C:\Program Files\Java\jdk1.7.0_45\db\lib\derby.jar; C:\Program Files\Java\jdk1.7.0_45\db\lib\derbytools.jar;
  • 我在一个新项目中尝试过,结果你还需要 derbyclient.jar。
  • 是的,我想,我也刚刚添加了。仍然收到错误,因为我不知道在哪里放置:“Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
  • 那么你的类路径配置不正确。在 IntelliJ 中,您需要右键单击您的项目 - 选择“打开模块设置”,然后转到 libraries 并添加 derby.jar 和 derbyclient.jar。
【解决方案2】:

没有合适的驱动程序意味着您没有在类路径中添加所需的 jar。 如果您使用的是 eclipse,请按照此操作

  • 右键单击项目
  • 点击构建路径->配置构建路径
  • 然后单击库选项卡
  • 然后点击添加外部jar并给出jar文件的路径。
  • 重新运行项目

按照 IntelliJ IDEA 的步骤进行操作

  1. 点击文件
  2. 点击项目结构(快捷键 ctrl + shift + alt + s)
  3. 然后单击模块,然后单击依赖项
  4. 然后点击添加->项目库

【讨论】:

  • 我没有使用 Eclipse,你能描述一下这是做什么的,以便我可以尝试在 IntelliJ 中弄清楚吗?
  • @EdoIsa 您使用的是哪个数据库?
  • 我正在使用 JavaDB,我认为是 Derby。我在那里发布的代码......它来自我的书,它使用 Derby。
  • 从这里点击什么,应该选择哪个目录? postimg.org/image/vnji07hfv
  • @MatthijsBierman 是的!那部分在书中,但没有说明如何!
猜你喜欢
  • 2014-08-10
  • 2021-10-03
  • 2020-02-08
  • 1970-01-01
  • 2012-12-20
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
相关资源
最近更新 更多