【问题标题】:Setting up a Java Database设置 Java 数据库
【发布时间】:2021-07-25 11:06:34
【问题描述】:

我正在尝试为编程类设置 Java DB 数据库。我正在遵循 Deitel 和 Deitel 教科书中的步骤:

我已经安装了 JDK11.8.0_112。 我正在运行 Windows 10。

我的安装在 C:\Program Files\Java\jdk1.8.0_112 我将 JAVA_HOME var 设置为 C:\Program Files\Java\jdk1.8.0_112

教科书说去安装位置 db\bin 并编辑 setEmbeddedCP.bat 文件 @rem 将 DERBY_INSTALL= 设置为 @SET DERBY_INSTALL=%JAVA_HOME%\db

然后打开命令提示符,进入该文件所在目录并运行,我已经完成了,结果如下:

本书有一些创建表格的源代码。我复制并粘贴到我自己的项目中,C:\Users\hulbe\OneDrive\Documents\NetBeansProjects\DisplayAuthors\build\classes\displayauthors。

这本书然后声明使用命令行并将目录更改为包含章节示例的文件夹,这些示例现在位于我自己的项目中。

接下来,在命令行中输入“%JAVA_HOME%\db\bin\ij”。

然后,连接 'jdbc:derby:newbooks;create=true;user=xxx;password=xxx'; 我有数据库和要创建的表(我认为)。但是当我运行代码时,我得到 "java.sql.SQLException: 找不到适合 jdbc:derby:newbooks 的驱动程序"

我真的在我的智慧结束这里。现在我花了两天时间尝试设置全新安装,并按照书籍的设置方式进行操作。

代码如下:`try ( 连接连接 = DriverManager.getConnection( DATABASE_URL, "deitel", "deitel");

        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(SELECT_QUERY)) {
        
        ResultSetMetaData metaData = resultSet.getMetaData();
        int numberOfColumns = metaData.getColumnCount();
        
        System.out.printf("Authors Table of Books Database: %n%n");
        
        for (int i = 1; i  <= numberOfColumns; i++) {
            System.out.printf("%-8s\t", resultSet.getObject(i));
        }
    }
    catch (SQLException sqlException) {
        sqlException .printStackTrace();
    }`

我知道这很长,而且我确信它已经被问过了,但我所看到的一切都无法帮助我解决这个问题。

有人知道我做错了什么吗?

编辑:问题是我必须提取 derby.jar 文件并手动添加它们,谢谢 Marco Tizzano。

但是,现在我收到此错误: java.sql.SQLException:找不到数据库“书籍”。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection.handleDBNotFound(未知来源) 在 org.apache.derby.impl.jdbc.EmbedConnection.(未知来源) 在 org.apache.derby.jdbc.InternalDriver$1.run(未知来源) 在 org.apache.derby.jdbc.InternalDriver$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(未知来源) 在 org.apache.derby.jdbc.InternalDriver.connect(未知来源) 在 org.apache.derby.jdbc.InternalDriver.connect(未知来源) 在 org.apache.derby.jdbc.AutoloadedDriver.connect(未知来源) 在 java.sql.DriverManager.getConnection(DriverManager.java:664) 在 java.sql.DriverManager.getConnection(DriverManager.java:247) 在 displayauthors.DisplayAuthors.main(DisplayAuthors.java:24) 原因:错误 XJ004:找不到数据库“书籍”。

编辑 2: 我想我在错误的目录中创建了数据库,我在正确的目录中重新运行它,ProjectName->src->proejctname。命令提示符显示所有正确的 SQL 内容、表创建和列名等,然后运行插入。这也在该目录中创建了一个名为 db 的文件夹,但仍然找不到 DB 错误。

【问题讨论】:

标签: java jdbc derby


【解决方案1】:

使用 NetBeans 通过本地服务器设置数据库并通过该连接运行 SQL 语句。

【讨论】:

    【解决方案2】:

    如果您在 Netbeans 中运行代码,问题是 JVM 找不到 Apache Derby 的驱动程序,通常(从 JDBC 4.0+ 开始)会自动从类路径加载。
    请记住,为了成功获得数据库连接,首先需要 DB 供应商驱动程序文件(在本例中为 derby.jarderbytools.jar derbyoptionaltools.jar) 必须存在于 CLASSPATH 中,事实上这正是本书指导您创建数据库时所做的事情。
    因此,在您的情况下,您必须在项目依赖项中添加这些库。
    我从未使用过 Netbeans,但这个答案会对您有所帮助:How do I set the classpath in NetBeans?

    我在这里报告要做的步骤:

    1. 右键单击您的项目。
    2. 选择Properties
    3. 点击左侧的Libraries
    4. 在编译选项卡下 - 单击Add Jar/Folder 按钮。

    或者

    1. 扩展您的项目。
    2. 右键单击Libraries
    3. 选择Add Jar/Folder

    【讨论】:

    • 这有帮助,谢谢。现在我的错误是“java.sql.SQLException: Database 'newbooks' not found.”
    • 您用来创建数据库的代码肯定不起作用。编辑问题并添加您遇到的错误,我们会尽力为您提供进一步帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 2021-11-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多